2

我只是有一个关于二进制数补码的快速问题,也许有人可以帮助我理解。

我正在学习计算机安全测试,我正在练习将十进制数转换为二进制数,然后使用一个和两个补码。我得到十进制数 237 并将其转换为二进制 11101101。我知道在一个补码中你颠倒了这些位,这很简单。当我反转它时,我得到 00010010 但答案省略了前三个 0。有人可以向我解释为什么会这样吗?

4

2 回答 2

0

值 237 太大而无法存储在带有反码的单个 8 位有符号字节中。如果它被存储在一个 16 位的 int 中,它和它的一个补码否定将在基数 2 中具有各自的表示:

0000000011101100

1111111100010011

当手动进行这样的算术运算时,如果您打算稍后取反,请在您的数字左侧保留一些额外的数字以说明数字的符号。

于 2019-02-07T00:32:06.550 回答
0

那些前导 0 没有任何意义。基本上,十进制可以说 07 == 7 == 00000000007,所以二进制同样 00010010 == 10010 == 0000000000000010010 成立。

于 2019-07-13T15:31:22.270 回答