00JAVA语法基础 原码、反码、补码

记得之前学C语言的时候老师课上讲过一些,不过当时觉得考试不考,也就上课听了下,下课也没怎么多做了解。这次,Java课上再次提出来了,自己也超越了些资料,对这三种概念算是有所初步了解。

1、原码

数据储存的一种,就是以最高位储存符号(0为正数,1为负数),其他位储存数字(以二进制方式)

例如:

7 0000 0111
-7 1000 0111

2、反码

正数的反码与原码一致,而负数的反码则是除最高位以外的数字全部相反(0换成1,1换成0)

例如:

  7 -7
原码 0000 0111 1000 0111
反码 0000 0111 1111 1000

3、补码

正数的补码与原码一致,负数的补码是反码+1

例如:

  7 -7
原码 0000 0111 1000 0111
反码 0000 0111 1111 1000
补码 0000 0111 1111 1001

在资料上也看到了一些测试方法,用原码计算10-10,即0000 1010(10的原码)   +   1000 1010 (-10的原码) = 1001 0100 (-20的原码),所以原码计算是不准确的;同样的反码也有类似的问题,如0000 1010(10的反码) +1111 0101(-10的反码)= 1111 1111(-0的反码),显然也是错误的,而补码就解决了这个问题,如 0000 1010(10的补码)+  1111 0110(10的补码)= 1 0000 0000  而只能储存八位,所以最高位就被舍弃了,就变成了0000 0000(0的补码)。

在Java中用的就是补码的运算。

原文地址:https://www.cnblogs.com/flw0322/p/9751154.html