整数在内存中的存储
在计算机内存中,整数一律采用补码的形式来存储。这意味着,当读取整数时还要采用逆向的转换,也就是将补码转换为原码。将补码转换为原码也很简单:先减去 1,再将数值位取反即可。
我们先来解以下几个概念
- 原码
将一个整数转换成二进制形式,就是其原码。例如 short a = 6;,a 的原码就是 0000 0000 0000 0110;更改a 的值 a = -18;,此时 a 的原码就是 1000 0000 0001 0010。
通俗的理解,原码就是一个整数本来的二进制形式。
- 反码
对于正数(原码反码相同);对于负数,负数的反码是将原码中除符号位以外的所有位取反(1变成0,0变成1)。例如 short a = 6;,a 的原码和反码都是 0000 0000 0000 0110;更改 a 的值 a = -18;,此时 a 的反码是 1111 1111 1110 1101。
- 补码
对于正数,它的补码就是其原码(原码、反码、补码都相同);负数的补码是其反码加 1。例如 short a = 6;a 的原码、反码、补码都是 0000 0000 0000 0110;更改 a 的值 a = -18;,此时 a 的补码是 1111 11111110 1110。
最后,进行总结:
- 正数的原码、反码、补码相同
- 负数的原码是其二进制形式,补码是原码中除符号位以外所有位取反。负数补码是其反码加1。
- 正数二进制最高位的符号位为0