首页 > 代码库 > 关于补码
关于补码
关于补码:
为什么要用补码?
计算机中只有加法,所谓的减法也是加法。为了理解补码,我们可以考虑到钟表的例子。钟表一圈是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?
计算机中整数的表示
计算机中是采用2进制补码表示整数的,当然非负数的补码就是其自身,对于n位2进制来说,其非负数的补码表示范围是
(0 - 2^n-1). 那么针对负数呢-1 ~ -(2^n-1)其对应的补码范围就是(2^n-1)~ 1了。
为什么要用补码?
计算机中只有加法,所谓的减法也是加法。为了理解补码,我们可以考虑到钟表的例子。钟表一圈是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……。
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。