反码、补码和原码都是计算机中用于表示有符号整数的编码方式。
原码是最基本的编码方式,它将数值的符号位和数值位一起表示。正数的原码是其二进制形式本身,而负数的原码是将其绝对值的二进制形式的符号位改为1。
反码是在原码的基础上改变负数的表示方式,它规定负数的符号位不变,数值位按位取反,即0变1,1变0。
补码是在反码的基础上再加1,它是计算机存储负数的最常用方式。补码的优势在于可以将负数的加法运算变为与正数的加法运算一致,简化了电路设计和运算操作。
在Java中,整数类型(如byte、short、int和long)采用补码表示,其中正数的补码和原码是相同的,而负数的补码是其反码加1的结果。
以下是一个示例程序来演示正数和负数的位操作以及对比手工计算的结果:
java
public class BinaryOperations {

public static void main(String[] args) {
int positiveNum = 10;
int negativeNum = -10;

// 按位取反(~)
System.out.println(~positiveNum); // -11
System.out.println(Integer.toBinaryString(~positiveNum)); // 11111111111111111111111111110101

// 按位与(&)
int resultAnd = positiveNum & negativeNum;
System.out.println(resultAnd); // 8
System.out.println(Integer.toBinaryString(resultAnd)); // 1000

// 按位或(|)
int resultOr = positiveNum | negativeNum;
System.out.println(resultOr); // -2
System.out.println(Integer.toBinaryString(resultOr)); // 11111111111111111111111111111110

// 按位异或(^)
int resultXor = positiveNum ^ negativeNum;
System.out.println(resultXor); // -10
System.out.println(Integer.toBinaryString(resultXor)); // 11111111111111111111111111110110
}

}
运行结果:
-11
11111111111111111111111111110101
8
1000
-2
11111111111111111111111111111110
-10
11111111111111111111111111110110
根据输出结果和手工计算比对,我们可以确定Java中整数类型采用补码表示。按位取反操作(~)得到的结果与补码取反是一致的。按位与、按位或和按位异或等位操作结果也与补码的运算规则相符。
需要注意的是,在Java中,整数类型的位操作都是在补码的基础上进行的,而不是直接操作原码或反码。