一、阅读相应教材,或者使用互联网搜索引擎,弄清楚反码、补码跟原码这几个概念,然后编写示例程序,对正数、负数进行各种位操作,观察输出结果,与手工计算的结果进行比对,看看Java中的数是采用上述哪种码表示的。
原码、反码、补码是计算机中对数字的二进制表示方法。
原码:将最高位作为符号位(0表示正,1表示负),其它数字位代表数值本身的绝对值的数字表示方式。
反码:如果是正数,则表示方法和原码一样;如果是负数,符号位不变,其余各位取反,则得到这个数字的反码表示形式。
补码:如果是正数,则表示方法和原码一样;如果是负数,则将数字的反码加上1(相当于将原码数值位取反然后在最低位加1)。
总结:正数的原码、反码、补码完全一样,只有负数需要按照以上规则计算。
在Java中,整数是以二进制补码的形式表示的。正数的补码和原码相同,而负数的补码是通过对其绝对值的原码取反后再加1来得到的。
public class BitManipulationExample {
public static void main(String[] args) {
// 正数和负数的二进制表示
int positiveNumber = 5; // 正数5
int negativeNumber = -5; // 负数-5
System.out.println("正数5的二进制表示:" + Integer.toBinaryString(positiveNumber));
System.out.println("负数-5的二进制表示:" + Integer.toBinaryString(negativeNumber));
// 位操作示例
int a = 12; // 二进制为 1100
int b = 6; // 二进制为 0110
// 与操作(&)
int resultAnd = a & b; // 结果为 0100,即4
System.out.println("a & b = " + resultAnd);
// 或操作(|)
int resultOr = a | b; // 结果为 1110,即14
System.out.println("a | b = " + resultOr);
// 异或操作(^)
int resultXor = a ^ b; // 结果为 1010,即10
System.out.println("a ^ b = " + resultXor);
// 左移操作(<<)
int resultLeftShift = a << 2; // 结果为 110000,即48
System.out.println("a << 2 = " + resultLeftShift);
// 右移操作(>>)
int resultRightShift = a >> 2; // 结果为 11,即3
System.out.println("a >> 2 = " + resultRightShift);
// 无符号右移操作(>>>)
int resultUnsignedRightShift = a >>> 2; // 结果为 11,即3
System.out.println("a >>> 2 = " + resultUnsignedRightShift);
}
}
二、运行以下代码
结果为
在Java中,浮点数的计算可能会产生精度问题,这是由于浮点数的内部表示方式导致的。浮点数使用二进制来表示小数,因此在某些情况下,浮点数的运算结果可能不同于预期。
具体来说
1. `0.05 + 0.01`:
预期结果是 `0.06`,但实际上结果是 `0.060000000000000005`。这是因为 `0.05` 和 `0.01` 的二进制表示无法精确地表示 `0.06`。
2. `1.0 - 0.42`:
预期结果是 `0.58`,但实际上结果是 `0.5800000000000001`。同样,这是由于二进制表示的精度问题。
3. `4.015 * 100`:
预期结果是 `401.5`,但实际上结果是 `401.49999999999994`。这是因为 `4.015` 的二进制表示也无法精确地表示 `401.5`。
4. `123.3 / 100`:
预期结果是 `1.233`,但实际上结果是 `1.2330000000000001`。同样,这是由于二进制表示的精度问题。
要在浮点数计算中获得更精确的结果,通常使用 `BigDecimal` 类。
import java.math.BigDecimal;
public class TestBigDecimal {
public static void main(String args[]) {
BigDecimal num1 = new BigDecimal("0.05");
BigDecimal num2 = new BigDecimal("0.01");
BigDecimal sum = num1.add(num2);
System.out.println("0.05 + 0.01 = " + sum);
}
}
标签:java,int,代码,System,二进制,实验,println,原码,out From: https://www.cnblogs.com/yindantong/p/17703848.html