28 二进制换算

诸位帮一下忙

11100

告诉你一个简单的转换方法:
首先,在稿纸上书写下面的数列
…… 512 — 256 —128 — 64 — 32 — 16 — 8 — 4 — 2 — 1 — 0.5 — 0.25 — 0.125 ……
然后用要转换的十进制数(例如 947.34)和数列做比较,看包含的最大值是多少,这里包含512,请在512下面写一个“1”。然后用947.34减去512,得到435.34;继续重复上面的工作,现在435.34包含的最大数是256,请在256下面再写一个“1”,435.34-256=179.34,结果包含128,请在128下面写“1”,179.34-128=51.34,注意,51.34已经不能包含64了,请在64下面写一个“0”,下面包含的数是32,在32下面写“1”,51.34-32=19.34,依次类推,直到将整数部分完全分解
…… 512 — 256 —128 — 64 — 32 — 16 — 8 — 4 — 2 — 1 — 0.5 — 0.25 — 0.125 ……
1 1 1 0 1 1 0 0 1 1
现在整数部分已经转换完毕了,结果在上面很明显。那小数部分如何处理呢?原理和步骤与转换整数部分是一样的,0.34里不包含0.5,请在0.5下面写“0”,包含0.25,请在0.25下面写“1”,然后用0.34-0.25=0.09,不包含0.125,但包含0.0625,再往后转换就要看题目要求的位数了,可能要舍弃某些数据,这就叫“截断误差”
— 0.5 — 0.25 — 0.125 ……
0 1 0 1
连接两部分,我们得到最终的转换结果为 1110110011.0101,注意中间的小数点!
以上是十进制向二进制的转换,如何进行逆向转换呢,我们还需要那串数列,
按小数点对应“1”和“0.5”中间的法则,对齐每一位后,成下面的样子
…… 512 — 256 —128 — 64 — 32 — 16 — 8 — 4 — 2 — 1 — 0.5 — 0.25 — 0.125 — 0.0625……
1 1 1 0 1 1 0 0 1 1 . 0 1 0 1
然后把所有“1”对应的位加起来,即:512+256+128+32+16+2+1+0.25+0.0625=947.3125
和原来的数值947.34相比,有了0.0275的误差,这就是“截断误差”,在计算机计算里不可避免。
其实按照这样的方法可以进行任意进制的转换,以3进制为例,可以写出数列
……— 729 —243 — 81 — 27 — 9 — 3 — 1 — 1/3 — 1/9 — 1/27……
1 0 2 2 0 0 2 . 1 0 0
转换的时候要看包含几个最大数,继续以947.34为例,首先包含1个729,在729下面写一个“1”,
947.34-729*1=218.34,不包含243,但包含2个81,在243下面写“0",在81下面写“2”,218.34-81*2=56.34,包含2个27,56.34-27*2=2.34,9和3下面都写“0”,在1下面写“2”;小数部分一致。
三进制的转换结果为1022002.10
转换回十进制的算法是:729*1+81*2+27*2+1*2+.33333=947.33333,依然存在截断误差。
聪明的读者去发挥吧,管它多少进制都不在话下!不过八进制和十六进制还是先转换成二进制,然后按3位或4位分段规则转换,算起来更迅速。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2008-06-18
28/2=14 余0

14/2=7 余0

7/2=3 余1

3/2=1 余1

1/2=0 余1

把所有的余数反过来排列一下就是了:11100
第2个回答  2008-06-23
十进制整数转二进制,八进制,十六进制都要倒序,只不过除数分别是2,8,16罢了。
第3个回答  2008-06-18
用短除法
28/2=14...0
14/2= 7...0
7/2= 3...1
3/2= 1...1
1/2= 0...1

倒序得:11100
第4个回答  2008-06-18
28的二进制0000 0000 0001 1100(这是一个字的表示方法)