阅读相应教材,或者使用互联网搜索引擎,弄清楚反码、补码跟原码这几个概念,然后编写示例程序,对正数、负数进行各种位操作,观察输出结果,与手工计算的结果进行比对,看看Java中的数是采用上述哪种码表示的。

原码:在计算机中,用二进制表示数时,最高位是符号位(0表示正数,1表示负数),其余位表示数的绝对值。例如,5的原码是00000101,-5的原码是10000101。
反码:对于正数,反码与原码相同;对于负数,反码是将原码除符号位以外的所有位取反。例如,5的反码是00000101,-5的反码是11111010。
补码:对于正数,补码与原码相同;对于负数,补码是反码加1。例如,5的补码是00000101,-5的补码是11111011。

public class BitwiseOperations {
public static void main(String[] args) {
int positiveNumber = 5; // 正数
int negativeNumber = -5; // 负数
// 打印原码、反码、补码
System.out.println("正数的原码、反码、补码(以二进制表示):");
printBinary(positiveNumber, "原码");
printBinary(~positiveNumber & 0xFFFFFFFF, "反码(按位取反后与0xFFFFFFFF相与)");
printBinary(positiveNumber, "补码(正数补码与原码相同)")
System.out.println("\n负数的原码、反码、补码(以二进制表示):");
printBinary(negativeNumber, "原码(直接输出为补码形式,但理解为原码输入)");
printBinary(~negativeNumber & 0xFFFFFFFF, "反码(按位取反后与0xFFFFFFFF相与)");
printBinary(negativeNumber, "补码");
// 位操作示例
System.out.println("\n位操作示例:");
System.out.println("正数左移一位:" + (positiveNumber << 1));
System.out.println("负数左移一位:" + (negativeNumber << 1));
System.out.println("正数右移一位:" + (positiveNumber >> 1));
System.out.println("负数右移一位:" + (negativeNumber >> 1));
}
// 打印整数的二进制表示
private static void printBinary(int number, String description) {
String binaryString = Integer.toBinaryString(number);
if (number < 0){
binaryString = binaryString.substring(binaryString.length() - 31); // 取32位中的低31位(去掉符号位前的补零)
binaryString = "1" + binaryString; // 加上符号位
}
System.out.printf("%s: %32s\n", description, binaryString);
}
}

 posted on 2024-09-28 10:03  敝屣  阅读(1)  评论(0编辑  收藏  举报