您的位置:首页 > 其它

宝宝进制转换学习总结

2009-09-11 01:13 344 查看
昨天老师讲到编码问题了,听的我有点晕了,嘿嘿!

早上六点钟闹铃就想了,起来没事干就查点资料看看。

说到编码肯定要先从计算机读取数据的方式入手了,

在计算机中存储数据的最小单位是位(bit),但计算机

不会以位作为最基本的存储单位,那样就太复杂了,所

以就采用字节(byte)作为最小的存储单位,1byte==8bit.

计算机在存储数据时是一个字节也就是八位用来表示一个

字符(一个数字、字母或其他符号,汉字就不只是一个字节了)

而这些字节都是以二进制数在计算机中存储的,但我们在

编程时经常用的是十进制或者八进制、十六进制。

所以我先说下他们之间的转换吧!

十进制用的最多了,那就从十进制开始:

十进制到二进制转换方法:

整数部分除以2求出商和余数,在用商继续处于2求出商和余数

以此类推直到商为0为止,然后所得结果的余数倒置过来就是二进制

整数位,比如:

十进制6.6875的整数部分二进制为:

6除以2 商3 余0

3除以2 商1 余1

1处于2 商0 余1

所以6的二进制整数位就等于110(记得余数要倒置过来)

好了,那我们在看看小数部分怎么转呢?

用小数部分乘以2获得结果的整数部分保留,然后在用此结果的小数

部分在乘以2取整,以此类推,直到小数部分为0。

十进制6.6875的小数部分二进制为:

0.6875乘以2 积1.375 整1

0.375乘以2 积0.75 整0

0.75乘以2 积1.5 整1

0.5乘以2 积1.0 整1

所得积的小数部分为0就结束了,0.6875(十)==》0.1011(二)

那么十进制的6.6875转换成二进制为110.1011

十进制到十六进制转换方法(同上):不过要除以16了。

(切记:十进制到某一进制的转换都是除以要转换的进制数)

100.728(十六)======》二进制转换(假设我们的二进制就保留三位小数)

95除以16 商5 余F

5除以16 商0 余5

这是整数部分结果为F5

再看小数部分:

0.728乘以16 积11.648 整B

0.648乘以16 积10.368 整A

0.368乘以16 积5.888 整5

后面我们就不用再算了,假设就保留到这

则:十进制的100.728转换为十六进制位:F5.BA5

好了,八进制也一样。

那么现在我们再看看其他进制向二进制的转换

八进制到二进制(二进制到八进制)的转换:

520(八)===========》二进制

当我们随便拿个二进制时要想转成八进制可以这么做:

1011010从右向左每三位一划分,最后不够用0不上。

如:上面二进制可转为==》001 011 010

那么001中每一个数字从左向右按照 当前数字乘以4,下一个数字乘以2,

最后一个数字乘以1,然后加起来就组成了第一个八进制数,后面的001和010

也都一样,最后把获得的三个八进制数连接起来就是最终的结果。

即:001-----------》1

011-----------》3

010-----------》2

所以二进制的1011010转换为八进制就是132。

当我算到这时突然就想,这结果虽然是对的(不信了您可以反过来算下)

但为什么要这样算了,其实这并不复杂,我们可以仔细想想:

1011010这是个二进制数(我操!这不废话吗,嘿嘿!),我们就拿它的后三位来看,

010最后一位最大八进制也就是1(别说这也看不出来),那中间那位最大能表示几呀?

肯定是2吧,那我们在看最前面那位伙计,它最大又能表示到几呢?

很显然后三3个都是0的话它最大也就是4了!而如果它们三个都是1的话正好就是7了,

哎呀,这不正好它在加个1就逢到上一位去了。

也就是说111再加1逢到上一位的那个1即:1000这个1就代表着一个8了。

所以说1011010中我们三个一分的话,后三位是个2吧,而再向前推三个的话,我们就拿

1011010中第四个1来看他就代表着一个8了,那么它再继续进两次一就是中间那011即就是

3个8了,所以132后面的32就代表着011(3*8)+010(1*2),而1011010中的最高位的

那个1就代表着8个8了,也就是说132中的1就是8个8。好了不敢再说了,我现在都快被

说蒙住了,嘿嘿!

那么反过来八进制的520到二进制也就很容易了

5---------》101

2---------》010

0---------》000

520(八)===========》101010000(二)

十六进制到二进制和上面算法基本一样,不同的是:

八进制转换是以每三位一划分,从左向右是4,2,1乘以当前数再相加。

而十六进制转换是以每四位一划分,从左向右是8,4,2,1乘以当前数再相加。

接着我们再看看其他进制到十进制的转换:

二进制到十进制的转换:

这个应该不是很难,就举个简单的例子看看吧!

1110(二)================>1*2的3次方+1*2的2次方+1*2的1次方+0*2的0次方结果为:

1110(二)================》8+4+2+0 = 14

1111111(二)============》127

(127+1(0也表示一个字符)=128正好是ASCII码表所能表示的最大字符数,嘿嘿!)

我们看一下规律:

不管几进制它到十进制的转换都可以表示为:(n代表被转数的进制位)

当前数从末尾开始乘以n的0次方+倒数第二个数乘以n的1次方+--------以此类推。

十六进制到十进制的转换:

我们继续用上面的公式进行计算:

8A(十六)=======》10*16的0次方+8*16的1次方 ======》138

更直观的写法应该这样:8A = 8*16 + 10 = 138。

八进制到十进制和上面也就一样了,不做演示了。

好了进制就先搞到这里了,现在已经很困了,下次再谈编码问题!

明天早上还有课,也该休息了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: