我只是有一个关于二进制数补码的快速问题,也许有人可以帮助我理解。
我正在学习计算机安全测试,我正在练习将十进制数转换为二进制数,然后使用一个和两个补码。我得到十进制数 237 并将其转换为二进制 11101101。我知道在一个补码中你颠倒了这些位,这很简单。当我反转它时,我得到 00010010 但答案省略了前三个 0。有人可以向我解释为什么会这样吗?
我只是有一个关于二进制数补码的快速问题,也许有人可以帮助我理解。
我正在学习计算机安全测试,我正在练习将十进制数转换为二进制数,然后使用一个和两个补码。我得到十进制数 237 并将其转换为二进制 11101101。我知道在一个补码中你颠倒了这些位,这很简单。当我反转它时,我得到 00010010 但答案省略了前三个 0。有人可以向我解释为什么会这样吗?
值 237 太大而无法存储在带有反码的单个 8 位有符号字节中。如果它被存储在一个 16 位的 int 中,它和它的一个补码否定将在基数 2 中具有各自的表示:
0000000011101100
1111111100010011
当手动进行这样的算术运算时,如果您打算稍后取反,请在您的数字左侧保留一些额外的数字以说明数字的符号。
那些前导 0 没有任何意义。基本上,十进制可以说 07 == 7 == 00000000007,所以二进制同样 00010010 == 10010 == 0000000000000010010 成立。