3 個解答
- TaiLv 57 年前最佳解答
二進位
1111011.0010101110000101000111101011100001010001111010111000011
十六進位
7B.2b851eb851eb86
參考 : ugly code
#include <stdlib.h>
#include <stdio.h>
void main()
{
long double d = 0.17;
//long double d = 0.06640625;
//long double d = 0.0625*10.0;
long double p = 1.0;
for (int i = 0; d != 0; ++i) {
p *= 1.0/16.0;
int q = (d / p);
if (q == 0)
printf("0");
else {
printf("%x",q);
d -= (long double)q * p;
}
}
printf("\n");
system("pause");
}
2013-10-20 17:05:49 補充:
找到一個線上轉換,版大可以玩玩看。 0.17 可能沒辦法用有限二進位跟十六進位表示,都是逼近值
http://www.mathsisfun.com/binary-decimal-hexadecim...
0.001010111000010100011110101110000101000111101011100001b = .16999999999999998445
.0010101110000101000111101011100001010001111010111000011b =
.17000000000000001221
2013-10-20 17:36:57 補充:
貌似有限小數
二進位
1111011.0010101110000101000111101011100001010001111010111000010100011110111
十六進位
7B.2B851EB851EB851EE
參考資料: , http://www.mathsisfun.com/binary-decimal-hexadecim... http://www.mathsisfun.com/binary-decimal-hexadecim... - HarmonicaLv 77 年前
整數部分10轉2進位、2轉8進位、2轉16進位請參閱
http://tw.knowledge.yahoo.com/question/question?qi...
小數部分10轉2進位請參閱
http://tw.knowledge.yahoo.com/question/question?qi...
2013-10-24 20:50:35 補充:
- 北海牧羊人Lv 47 年前
如果是儲存在電腦記憶體的二進位, 雙精度浮點數double, 是用
sign bit + exponent (11 bits) + mantissa (52 bi ts) 去儲存, 任何一個數字會轉換成
(+-) 1.(mantissa bits)*2^(exponent-0x3FF), 這樣可以儲存最廣範圍的數字.
在這種情形下123.17
16進位表示是
0x 405E CAE1 47AE 147B
2進位表示是
01000000 01011110 11001010 11100001
01000111 10101110 00010100 01111011
2013-10-20 21:22:26 補充:
http://www.binaryconvert.com/result_double.html?de...
這是轉換的網址
http://zh.wikipedia.org/wiki/IEEE_754
這是定義