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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了原码反码补码相关内容以及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语言中是以哪一种码表示的的主要内容,如果未能解决你的问题,请参考以下文章

(转)java 原码反码补码计算 以及 取反运算,原码反码补码运算公式

(转)java 原码反码补码计算 以及 取反运算,原码反码补码运算公式

原码反码补码之间的快速转换和简单运算

C语言 原码 反码 补码

二进制的原码反码补码及相关计算

原码补码反码