首页 > 代码库 > 原码、反码、补码相关内容以及Java语言中是以哪一种码表示的

原码、反码、补码相关内容以及Java语言中是以哪一种码表示的

计算机中的数字是以二进制方式存储的,第一个二进制位为符号位,0代表正数,1代表负数

原码、反码、补码是计算机中存储数字使用的编码

1、原码、反码、补码的概念

原码:符号位加上这个数绝对值    

  例如正整数1的8位二进制原码为 00000001      负整数-1的8为二进制原码为 10000001    

反码:正数的反码就是其本身,负数的反码就是在原码的基础上除符号位外所有的位取反

  例如正整数1的8位二进制原码为 00000001  则其反码还为 00000001      

    负整数-1的8为二进制原码为 10000001  其反码为 11111110

补码:正数的补码是其本身,负数的补码为其反码再加1

  例如正整数1的8位二进制原码为 00000001  则其补码还为 00000001      

    负整数-1的8为二进制原码为 10000001  其反码为 11111110  其补码为   11111110 + 00000001 = 11111111

2、Java语言中的数字是以补码方式存储的

验证如下:

技术分享

 

由负整数10无符号右移一位得正2147483643可知Java中数字的存储方式为补码

分析:

如果存储方式为原码 则-10 存储的二进制表示为   10000000 00000000 00000000 00001010  无符号右移一位 得   01000000 00000000 00000000 00000101   此数十进制为 1073741829

如果存储方式为反码 则-10 存储的二进制表示为   11111111 11111111 11111111 11110101  无符号右移一位 得   01111111 11111111 11111111 11111010  此数十进制为 2147483642

如果存储方式为补码 则-10 存储的二进制表示为   11111111 11111111 11111111 11110110  无符号右移一位 得   01111111 11111111 11111111 11111011  此数十进制为 2147483643

Java中负整数10无符号右移一位得正2147483643与存储方式为补码分析出来的结果相同

所以Java中数字存储方式为补码。

 

原码、反码、补码相关内容以及Java语言中是以哪一种码表示的