补码的计算

计算机中存储的都是补码,我们手算补码,有一些简便的方法,下面记录补码计算的一些方法。
首先,正数的原码反码补码都一样,
负数的反码=其自身的原码除符号位以外取反
负数的补码=其自身的反码+1

例如,计算机读取到两个数,0x2cef9和0xfd7a0d。
则,我们可以视这两个数为,
[a]补=0x2cef9
[b]补=0xfd7a0d

✅方法1:
直接计算,快速
[a+b]补
=[a]补+[b]补
=0x2cef9+0xfd7a0d
=0x1004906,
因为有溢出,所以会截断,结果会是0x004906,即补码为0x4906,由于为正数,原码也为0x4906,真值也就为0x4906
【ps:
如果为32位的,准确的计算,其实是补全位数计算,即在整数前面补上符号位
[a+b]补=[a]补+[b]补=0x0002 cef9+0xfffd 7a0d=0x1 0000 4906,因为是32位所以还是有溢出,同上截断取结果就好。

✅方法2:
由于[b]补+[-b]补=[0]补
则[-b]补=[0]补-[b]补,
即[-b]补=[0]补-[b]补=0x100 0000-0xfd7a0d=0x285f3
【ps:
其实[-b]补=[0]补-[b]补,
就是[-b]补=[b]补 连同符号位取反 + 1 ,
而连同符号位取反,其实也就是n个f减去自身,即,
[-b]补
=0xffffff-0xfd7a0d+1
=0x100 0000-0xfd7a0f
=0x285f3

又[b]补=-[-b]补
[a+b]补
=[a]补+[b]补
=[a]补-[-b]补
=0x2cef9-0x285f3
=0x4906

你可能感兴趣的:(学习,经验分享)