版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/baidu_28068985/article/details/82997375
在java虚拟机中,整数有byte、short、int、long四种,分别为8位、16位、32位、64位有符号整数。整数在计算机中使用补码表示,在java虚拟机中也不例外。下面简单介绍 原码 反码 补码
原码
原码就是符号位加上 数字的二进制表示, 即用第一位表示符号, 其余位表示值. 以byte为例,比如如果是 8 位二进制:
+6 的原码
[+1]原 = 0000 0110
-5的原码
[-1]原 = 1000 0101
第一位是符号位. 因为第一位是符号位, 所以 8 位二进制数的取值范围就是: [1111 1111 , 0111 1111] 即 [-127 , 127]
对原码来说,绝对值相同的正数和负数只有符号位不同,如 6 和 -6
反码
反码的表示方法是: 正数的反码是其本身,负数的反码是在其原码的基础上, 符号位不变,其余各个位取反。
+6 的原 反码
[+1]原 = 0000 0110
[+1]反 = 0000 0110
-5的原 反码
[-1]原 = 1000 0101
[-1]反 = 1111 1010
补码
补码的表示方法是: 正数的补码就是其本身, 负数的补码是在其原码的基础上, 符号位不变, 其余各位取反, 最后 +1. (即在反码的基础上 +1)
+6 的原 反 补码
[+1]原 = 0000 0110
[+1]反 = 0000 0110
[+1]补 = 0000 0110
-5的原 反 补码
[-1]原 = 1000 0101
[-1]反 = 1111 1010
[-1]补 = 1111 1011