原码, 反码, 补码详解

版权声明:本文为博主原创文章,未经博主允许不得转载。 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

关于原 反 补码的一些例子及好处

猜你喜欢

转载自blog.csdn.net/baidu_28068985/article/details/82997375