Bootstrap

正数负数的原码、反码、补码

假设有一个 int 类型的数,值为5,那么,它在计算机中表示为:

00000000 00000000 00000000 00000101

5转换成二制是101,不过int类型的数占用4字节(32位),所以前面填了一堆0。

-5在计算机中如何表示?在计算机中,负数以原码的补码形式表达。什么叫补码

呢?这得从原码,反码说起。

原码:

一个正数,按照绝对值大小转换成的二进制数就是正数的原码
一个负数,按照绝对值大小转换成的二进制数,然后最高位补1,就是负数的原码

比如

00000000 00000000 00000000 00000101 是5的原码。

10000000 00000000 00000000 00000101 是-5的原码。

反码:

正数的反码与原码相同
负数的反码为对该数的原码除符号位外各位取反

正数00000000 00000000 00000000 00000101 的反码还是 00000000 00000000 00000000 00000101

负数10000000 00000000 00000000 00000101每一位取反(除符号位),得11111111 11111111 11111111 11111010。

补码

正数的补码与原码相同
负数的补码为对该数的原码除符号位外各位取反,然后在最后一位加1

比如:10000000 00000000 00000000 00000101 的反码是:11111111 11111111 11111111 11111010

那么,补码为:

11111111 11111111 11111111 11111010 + 1 = 11111111 11111111 11111111 11111011

所以,-5 在计算机中表达为:11111111 11111111 11111111 11111011。
转换为十六进制:0xFFFFFFFB。

;