原码、反码、补码和-2147483648的补码表示

在网上看到一个挺奇怪的说法一个整数的原码是这个数的绝对值的原码,然后他就得出了

00000000 00000000 00000000 00000101 是 5的 原码

然后他又说反码就是32位的每一位都取反

比如:将00000000 00000000 00000000 00000101每一位取反,得11111111 11111111 11111111 11111010。
称:11111111 11111111 11111111 11111010 是 00000000 00000000 00000000 00000101 的反码。

然后:

补码:反码加1称为补码。
也就是说,要得到一个数的补码,先得到反码,然后将反码加上1,所得数称为补码。
比如:00000000 00000000 00000000 00000101 的反码是:11111111 11111111 11111111 11111010。
那么,补码为:
11111111 11111111 11111111 11111010 + 1 = 11111111 11111111 11111111 11111011
所以,-5 在计算机中表达为:11111111 11111111 11111111 11111011。转换为十六进制:0xFFFFFFFB。

真真是有毒,怎么对着5的原码一顿操作就得到了-5的补码呢?完全没有区别正数和负数的区别,最后还自欺欺人的自洽了。

搞得我都差点信了,就算他说的是负数的转换方式,假设他知道正数的原码、反码、补码等于他自身(5的 原码、反码、补码都是00000000 00000000 00000000 00000101 ),
那他也把-5的原码搞错了:
-5的原码:10000000 00000000 00000000 00000101
而且负数原码转反码的方法也跟着错了:最高位是符号位不变,剩下31位按位取反

这样子想在解决求负数的补码的问题的时候是可以走捷径的——直接把负数的绝对值代表的二进制数取反再加1就可以了。可是万一真的有人不知道最高位是符号位呢,不会吧不会吧。而且求-2147483648的补码该怎么做呢?它没有对应的二进制正数。
,如果是上面的思想还认为-0的原码和0的原码一样是00000000 00000000 00000000 00000000那就不好做了。

-2147483648的补码是10000000 00000000 00000000 00000000
把数字都转换成补码的好处是减法可以当作加法计算:
1-1=1和-1的补码进行加法计算(符号位也要当数字来计算)=00000000 00000000 00000000 00000001+11111111 11111111 11111111 11111111=00000000 00000000 00000000 00000000(最高位的第33位舍去了),把结果当补码转换成原码就是0

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值