打印

补码的原理大家真的都搞清楚了么?

[复制链接]
5277|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
啊粒狗肉|  楼主 | 2007-9-27 19:35 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
这个问题我现在越想越晕,为什么把负数的绝对值取反加一了就是补码?

再举个例子: -12 的补码是0XF4,
       4-16就得到了-12,这又怎么解释?
沙发
HWM| | 2007-9-27 20:34 | 只看该作者

LZ:想一想 x-y 模2^n等于 x+(((2^n-1)-y)+1) 就明白了。

上式中 ((2^n-1)-y)+1 就是 y 的补码。

注:“模2^n等”就是n位二进制数“不考虑进位”的相等关系。

使用特权

评论回复
板凳
ayb_ice| | 2007-9-27 20:39 | 只看该作者

"负数的绝对值取反加一了就是补码?"

负数的补码应该是按位取反再加一(符号不能取反)...

使用特权

评论回复
地板
HWM| | 2007-9-27 20:46 | 只看该作者

3楼:补码不是负数的概念

原码和补码只是相补的关系,类似于补角。

他们的关系是:原码 + 补码 = 2^n

其中 n 是位数。

正数也可以取补。

使用特权

评论回复
5
啊粒狗肉|  楼主 | 2007-9-27 21:16 | 只看该作者

三楼,我说的是负数的绝对值

也就是相对负数的正值取反加一。

谢谢HWM ,补码的来历明白了。

使用特权

评论回复
6
啊粒狗肉|  楼主 | 2007-9-27 21:46 | 只看该作者

另外一个问题怎么解释

 -12 的补码是0XF4, 4-16就得到了-12,
 -239 的补码是0xff11, 17-256就得到-239,   这又怎么解释?没想明白

使用特权

评论回复
7
HWM| | 2007-9-28 07:48 | 只看该作者

6楼:自己算一下就明白了。

算的时候注意位数,并且最高位是1表示为负数。

使用特权

评论回复
8
啊粒狗肉|  楼主 | 2007-9-28 08:41 | 只看该作者

re

 啊粒狗肉 发表于 2007-9-27 21:46 侃单片机 ←返回版面  
 另外一个问题怎么解释 
 -12 的补码是0XF4, 4-16就得到了-12,
 -239 的补码是0xff11, 17-256就得到-239,  这又怎么解释?没想明白



 HWM 发表于 2007-9-28 07:48 侃单片机 ←返回版面   
 6楼:自己算一下就明白了。 
算的时候注意位数,并且最高位是1表示为负数。

你说的算是指怎么算,能不能再详细点,谢谢
 

使用特权

评论回复
9
HWM| | 2007-9-28 09:43 | 只看该作者

我的天哪,算术都不会吗?

4 - 16 -> 4 + F0h(16的补) -> F4h(12的补) -> -12

17-256 -> 11h + FF00h(256的补) -> FF11(239的补) -> -239

使用特权

评论回复
10
twz8858877| | 2007-9-28 09:48 | 只看该作者

拿个计算器(电脑上有)

选择十六进制,选好位数(即字节、字、双字、四字),算一下就知道了
真要手算:4的二进制是   00000100
         16的二进制是   00010000
   做二进制减法结果为   11110100    借位位(C)为1
舍去借位位结果就是0XF4了,也就是4-16=-12的补码(以上为字节形式,如要其它形式则补满前面的位即可)
补码能够方便计算,如将减法操作转成加法形式,4-16=4+(-16的补码)

使用特权

评论回复
11
computer00| | 2007-9-28 09:54 | 只看该作者

补码的作用就是一个数跟它的相反数相加结果为0

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

9

主题

40

帖子

1

粉丝