找回密码
 立即注册→加入我们

QQ登录

只需一步,快速开始

搜索
热搜: 下载 VB C 实现 编写
查看: 2225|回复: 0

关于补码

[复制链接]
发表于 2014-12-30 16:17:47 | 显示全部楼层 |阅读模式

欢迎访问技术宅的结界,请注册或者登录吧。

您需要 登录 才可以下载或查看,没有账号?立即注册→加入我们

×
关于补码:
为什么要用补码?
计算机中只有加法,所谓的减法也是加法。为了理解补码,我们可以考虑到钟表的例子。钟表一圈是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).
回复

使用道具 举报

本版积分规则

QQ|Archiver|小黑屋|技术宅的结界 ( 滇ICP备16008837号 )|网站地图

GMT+8, 2024-11-15 06:57 , Processed in 0.034414 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表