原码是最简单的机器数表示法,用最高位表示符号位,其他位存放该数的二进制的绝对值。但原码最大的问题在于一个数加上它的负数不等于0,于是反码的设计思想就是为了解决这个问题。既然一个负数时一个正数的相反数,干脆把一个正数的二进制按位取反来表示它的负数。于是正数的反码和原码一致,而负数的反码就是它的原码除符号位外,按位取反。从表现形式看,正数的原码、反码、补码都一致,而负数的补码等于反码+1。
由于原码的计算逻辑缺陷,导致它进行正负相加计算时容易出现错误答案,因此我们可以设置一个较大的正数和一个绝对值相对较小的负数进行相加,看最后答案是正是负。而通过分析反码的计算逻辑能发现它的缺陷,就是它可以出现-0的情况,因此我们可以设置一对相反数,让他们相加,看最后结果是否是正常的0。于是我们可以设置以下程序:
int a=5;
int b=-5;
int c=-3;
System.out.println(a+c);
System.out.println(a+b);
然后得到以下结果:
2
0
因此仅用排除法我们可得:JAVA计算用的是补码