现在的位置: 首页 > 综合 > 正文

计算机整数为什么如此进行编码的一个更易理解的说明.值得学习.

2013年10月13日 ⁄ 综合 ⁄ 共 620字 ⁄ 字号 评论关闭

16个码位,每个码位两种变化(0,1),一共有2的16次方种(既65536)不同变化.也就是可以为65536个数编码. 如果不考虑符号,那么那么它们可以为0~65535编码.这就是两字节无符号数的范围. 如果考虑符号,可行的方案是负数和非负数各占一半 . 65536/2=32768. 所以负数的范围是-32768~-1,非负数因为0要占一个位置,所以范围是0~32767. 现在考虑编码方案.为32768个数编码只需要15位,所以剩下的一位可以做为符号指示.0表示正数,1表示负数. 这样有符号数的0~32767的编码和无符号数在这个范围的编码相同. -32768~-1 的编码一种方案是直接用相应正数的编码,然后符号位设置为1.如果采用这种方案,人很好理解,但机器就不好处理了.早期的计算机研究者经过很多不同方案的研究比较,最终决定采用机器很好处理的"补码表示法",即负数的编码 是相应正数的编码取反加1. 比如正数1的2字节编码是 00000000 00000001,按位取反为11111111 11111110,再加1得11111111 11111111,这就得到了负数-1的编码.这是最大的负数,最小的负数:第一位是负号为1,其他位全0,即10000000 00000000. 要从2进制10000000 00000000得到其10进制可以这样算.符号位1得到负号,2进制数按位取反得到15位全1,对应正数32767,32767+1得到32768,结果-32768.

抱歉!评论已关闭.