关于补码

今天讲补码的时候卡壳了,有点尴尬,太想当然了,向童鞋们道歉!在这里把补码的原理解释一遍。

先看8位的二进制的范围[00000000, 11111111],我们暂时只考虑真值,即这里面所有的数都表示数值,其对应的十进制数的范围为[0, 255],也就是说8位二进制数的模为256,如果把这个范围分为两部分[00000000, 01111111]和[10000000, 11111111],后面的这一部分是不是刚好可以表示负数的二进制补码呢?

我们看一个具体的例子,如果我们要表示-3,其二进制补码为:

(10000011) = (11111100) = (11111101)

如果只把-3的补码的编码当数值看(没有符号位),则(11111101)2 = 253,那-3和253是什么关系呢?

-3 + 256 = 253,也就是-3 = 253(mod 256)(注:如果这个不能理解,就假设钟表圆盘上有256个刻度,依次标为0,1, ..., 255,在任意一个时刻点,钟表顺时针拨253个刻度和逆时针拨3个刻度指向同一个刻度)

这下应该明白了。 从这个角度,也就可以解释5-3=5+(-3)=5+253 (mod 256) = 258 (mod 256) = 2(mod 256),用二进制补码运算时,将符号位能带入计算也是因为这个原因。

回到8位二进制范围[00000000, 11111111],如果用二进制补码表示带符号数,[00000000, 01111111]表示正数,[10000000, 11111111]表示负数,则(10000001) = -127, (10000010)=-126, ..., (11111111) = -1,那多出来的(10000000) = ? 显然,根据补码的定义,符号位为1,这应该是负数,从节约资源的角度,将其定义为-128最合适,这也就是为什么8位二进制补码的范围为[-128~127]的原因。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1.你自已决定是否需要有正负: 就像我们必须决定某个量使用整数还是实数,使用多大的范围数一样,我们必须自已决定某个...
    Xiho丶阅读 6,518评论 0 2
  • 1、概念简介 子网掩码子网掩码又叫网络掩码、地址掩码,是一个32位地址,用于屏蔽IP地址的一部分以区别网络号和主机...
    黒猫阅读 12,326评论 0 23
  • 《深入理解计算机系统》第61页 表格第一行的补码-3与3相乘得到的-9不知道是怎么它用补码是怎么计算的。 查了一些...
    汪二小阅读 12,803评论 11 9
  • 利用Excel进制转换函数计算IP以及掩码 百度网盘密码: 9vpx 计算方法内容转自:涛声508: ip 子网...
    禾白小三飘阅读 14,399评论 1 3
  • 从16年受工伤到现在己快两年。小李今天刚进行了一审。开庭双方对受工伤的事实和法律规定工伤应得的待遇都表示认可。只是...
    叩寻阅读 3,688评论 0 0