求-63、-83、-127的2's、10's、16's补码,恳请验证计算结果
嘿,我来帮你把这些补码的计算理清楚,先从你已经算的2's补码开始验证,再把10's和16's补码的正确逻辑讲明白~
2's补码验证与说明
首先要明确:2's补码的计算依赖于二进制位数,不同位数的补码结果会不一样,先看你的计算:
- -63:如果是7位二进制(符号位+6位数值位),2^7 - 63 = 65,二进制是
1000001,这个是对的;如果是常用的8位,结果应该是11000001(2^8 - 63 = 193,对应二进制)。 - -83:8位二进制下,2^8 - 83 = 173,二进制是
10101101,和你的结果完全一致,正确! - -127:你写的
100000001是9位二进制的结果,不过更常用的8位二进制中,-127的补码是10000001(2^8 - 127 = 129,对应二进制);9位的话正确结果应该是110000001(2^9 - 127 = 385),这里你可能算错了哦~
10's补码的正确计算方法
10's补码是十进制的补码,规则很简单:
对于n位十进制数,负数的10's补码 =
10^n - |负数的绝对值|,或者先算9's补码(每位数字用9减去它)再加1。
给你算几个常用位数的例子:
- -63:按2位十进制计算,10² - 63 = 37,补码是
37;如果是3位,就是10³ - 63 = 937,记为937。 - -83:2位十进制下,100 - 83 = 17,补码是
17;3位的话是917。 - -127:3位十进制下,1000 - 127 = 873,补码是
873;4位的话是9873。
16's补码的正确计算方法
这里要纠正你一个误区:16's补码不是2's补码转十六进制,而是直接基于十六进制的补码规则,和2's补码逻辑类似:
对于n位十六进制数,负数的16's补码 =
16^n - |负数的绝对值|(用十六进制计算),或者先算15's补码(每位用F减去该位)再加1。
给你逐个验证:
- -63:63的十六进制是
3F,2位十六进制下,16² = 256(十六进制是100),100 - 3F = C1(十六进制减法),所以16's补码是C1。你之前得到的41是7位二进制2's补码转的十六进制,这不是正确的16's补码哦。 - -83:83的十六进制是
53,2位十六进制下,100 - 53 = AD,和你的结果一致,但你的计算方法是错的,只是刚好巧合(因为8位二进制=2位十六进制,此时2's补码转十六进制和16's补码结果相同)。 - -127:127的十六进制是
7F,2位十六进制下,100 - 7F = 81,这个结果和你一致,但同样要注意,正确逻辑是直接用十六进制计算,不是二进制补码转十六进制。
内容的提问来源于stack exchange,提问作者Zubin Kadva
相关产品推荐
相关产品推荐

