啊粒狗肉 发布于 2007-9-27 19:35:00 这个问题我现在越想越晕,为什么把负数的绝对值取反加一了就是补码?
再举个例子: -12 的补码是0XF4, 4-16就得到了-12,这又怎么解释?
HWM 发布于 2007-9-27 20:34:00 上式中 ((2^n-1)-y)+1 就是 y 的补码。
注:“模2^n等”就是n位二进制数“不考虑进位”的相等关系。
* - 本贴最后修改时间:2007-9-27 20:36:19 修改者:HWM ayb_ice 发布于 2007-9-27 20:39:00 负数的补码应该是按位取反再加一(符号不能取反)...
HWM 发布于 2007-9-27 20:46:00 原码和补码只是相补的关系,类似于补角。
他们的关系是:原码 + 补码 = 2^n
其中 n 是位数。
正数也可以取补。
* - 本贴最后修改时间:2007-9-27 20:47:50 修改者:HWM 啊粒狗肉 发布于 2007-9-27 21:16:00 也就是相对负数的正值取反加一。
谢谢HWM ,补码的来历明白了。
* - 本贴最后修改时间:2007-9-27 21:42:34 修改者:啊粒狗肉 啊粒狗肉 发布于 2007-9-27 21:46:00 -12 的补码是0XF4, 4-16就得到了-12, -239 的补码是0xff11, 17-256就得到-239, 这又怎么解释?没想明白
HWM 发布于 2007-9-28 7:48:00 算的时候注意位数,并且最高位是1表示为负数。
啊粒狗肉 发布于 2007-9-28 8:41:00 啊粒狗肉 发表于 2007-9-27 21:46 侃单片机 ←返回版面 另外一个问题怎么解释 -12 的补码是0XF4, 4-16就得到了-12, -239 的补码是0xff11, 17-256就得到-239, 这又怎么解释?没想明白
HWM 发表于 2007-9-28 07:48 侃单片机 ←返回版面 6楼:自己算一下就明白了。 算的时候注意位数,并且最高位是1表示为负数。
你说的算是指怎么算,能不能再详细点,谢谢
* - 本贴最后修改时间:2007-9-28 8:45:22 修改者:啊粒狗肉 HWM 发布于 2007-9-28 9:43:00 4 - 16 -> 4 + F0h(16的补) -> F4h(12的补) -> -12
17-256 -> 11h + FF00h(256的补) -> FF11(239的补) -> -239
twz8858877 发布于 2007-9-28 9:48:00 选择十六进制,选好位数(即字节、字、双字、四字),算一下就知道了 真要手算:4的二进制是 00000100 16的二进制是 00010000 做二进制减法结果为 11110100 借位位(C)为1 舍去借位位结果就是0XF4了,也就是4-16=-12的补码(以上为字节形式,如要其它形式则补满前面的位即可) 补码能够方便计算,如将减法操作转成加法形式,4-16=4+(-16的补码)
|