码迷,mamicode.com
首页 > 其他好文 > 详细

关于补码

时间:2014-06-21 23:46:05      阅读:235      评论:0      收藏:0      [点我收藏+]

标签:补码

关于补码:
为什么要用补码?
计算机中只有加法,所谓的减法也是加法。为了理解补码,我们可以考虑到钟表的例子。钟表一圈是12个时辰,
也就是12小时,3点+4点 = 7点,3点 + 10点 =?(对不起,越界了,不能表示),因为它是12进制,也就是说只
能表示0-11这12个点,超过了就越位了,就不能计算了。所以针对这个范围,我们只能计算结果在(0-11)的数。
那么针对减法诸如 8点 - 7点 该怎么计算呢?这时候就用到了补码的知识了,8点 - 7点 = 8点 + (-7点)= 8
点 + 5点 - 12点 。8点 + 5点肯定会越位产生进位,但是我们最后又把这个进位给减了,所以最终的结果是正确的。


关于2进制的减法
为什么负数的补码 = 反码 + 1?

对于具有n位的2进制的数,其能表达的范围是(0 ,2^n -1),产生进位的时候就是2^n了,所以负数的补码

 = 2^n - 该负数的绝对值 = (2^n - 1) - 该负数绝对值 + 1 = (反码)+ 1.



计算机中整数的表示
计算机中是采用2进制补码表示整数的,当然非负数的补码就是其自身,对于n位2进制来说,其非负数的补码表示范围是
(0 - 2^n-1).  那么针对负数呢-1 ~ -(2^n-1)其对应的补码范围就是(2^n-1)~ 1了。

有时候会把最高位当做符号位,最高位是0表示非负数,最高位是1表示负数,那么此时针对(-2^n)其补码会是2^n,

这时候n位的2进制上都是0,但是因为在(n+1)位是标志位,所以最大负数表示的是1 00000000……。0表示的是 0 0000000……。


结论:对于带符号位的(n+1)2进制来说,其能表示的最大范围是(-2^n -- 2^n-1).

关于补码,布布扣,bubuko.com

关于补码

标签:补码

原文地址:http://blog.csdn.net/ddupd/article/details/32703727

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!