课堂实验内容

发布时间 2023-09-13 22:14:29作者: 伐木工熊大

1.Enum是一种类类型,他的对象的值智能是其所有列举项目中的一个。

并且,各个枚举项的对象都是不相同的。

public class EnumTest {

    public static void main(String[] args) {
        Size s=Size.SMALL;
        Size t=Size.LARGE;
        //s和t引用同一个对象?
        System.out.println(s==t);  //
        //是原始数据类型吗?
        System.out.println(s.getClass().isPrimitive());
        //从字符串中转换
        Size u=Size.valueOf("SMALL");
        System.out.println(s==u);  //true
        //列出它的所有值
        for(Size value:Size.values()){
            System.out.println(value);
        }
    }

}
 enum Size{SMALL,MEDIUM,LARGE};
false
false
true
SMALL
MEDIUM
LARGE

2.反码补码原码

在计算机中,原码、反码和补码是表示有符号整数的三种常见方式。在Java中,整数采用补码表示。

原码表示法是将一个数值的绝对值转换为二进制,然后在最高位添加符号位。正数的符号位为0,负数的符号位为1。

反码表示法是在原码的基础上,对负数的其他位取反。正数的反码与原码相同。

补码表示法是在反码的基础上,再加1。正数的补码与原码相同。

下面是一个示例程序,展示了对正数和负数进行各种位操作的结果:

public class BitOperationsExample {
    public static void main(String[] args) {
        int num1 = 10; // 正数
        int num2 = -10; // 负数

        // 位操作示例
        System.out.println("原始值:" + num1 + " 的二进制表示:" + Integer.toBinaryString(num1));
        System.out.println("原始值:" + num2 + " 的二进制表示:" + Integer.toBinaryString(num2));

        // 按位取反
        System.out.println("~" + num1 + " = " + (~num1));
        System.out.println("~" + num2 + " = " + (~num2));

        // 按位与
        int andResult = num1 & num2;
        System.out.println(num1 + " & " + num2 + " = " + andResult);

        // 按位或
        int orResult = num1 | num2;
        System.out.println(num1 + " | " + num2 + " = " + orResult);

        // 按位异或
        int xorResult = num1 ^ num2;
        System.out.println(num1 + " ^ " + num2 + " = " + xorResult);

        // 左移
        int leftShiftResult = num1 << 2;
        System.out.println(num1 + " 左移 2 位:" + leftShiftResult);

        // 右移
        int rightShiftResult = num1 >> 2;
        System.out.println(num1 + " 右移 2 位:" + rightShiftResult);

        // 无符号右移
        int unsignedRightShiftResult = num2 >>> 2;
        System.out.println(num2 + " 无符号右移 2 位:" + unsignedRightShiftResult);
    }
}

结果:

原始值:10 的二进制表示:1010
原始值:-10 的二进制表示:11111111111111111111111111110110
~10 = -11
~-10 = 9
10 & -10 = 2
10 | -10 = -2
10 ^ -10 = -4
10 左移 2 位:40
10 右移 2 位:2
-10 无符号右移 2 位:1073741821

3.大数

浮点数类型后位置上的数字不准确

为了更准确的进行浮点数的运算可以使用大数类

import java.math.BigDecimal;

public class TestBigDecimal
{
    public static void main(String[] args) 
    {
        BigDecimal f1 = new BigDecimal("0.05");
        BigDecimal f2 = BigDecimal.valueOf(0.01);
        BigDecimal f3 = new BigDecimal(0.05);
        System.out.println("下面使用String作为BigDecimal构造器参数的计算结果:");
        System.out.println("0.05 + 0.01 = " + f1.add(f2));
        System.out.println("0.05 - 0.01 = " + f1.subtract(f2));
        System.out.println("0.05 * 0.01 = " + f1.multiply(f2));
        System.out.println("0.05 / 0.01 = " + f1.divide(f2));
        System.out.println("下面使用double作为BigDecimal构造器参数的计算结果:");
        System.out.println("0.05 + 0.01 = " + f3.add(f2));
        System.out.println("0.05 - 0.01 = " + f3.subtract(f2));
        System.out.println("0.05 * 0.01 = " + f3.multiply(f2));
        System.out.println("0.05 / 0.01 = " + f3.divide(f2));
    }
}

运行结果:

下面使用String作为BigDecimal构造器参数的计算结果:
0.05 + 0.01 = 0.06
0.05 - 0.01 = 0.04
0.05 * 0.01 = 0.0005
0.05 / 0.01 = 5
下面使用double作为BigDecimal构造器参数的计算结果:
0.05 + 0.01 = 0.06000000000000000277555756156289135105907917022705078125
0.05 - 0.01 = 0.04000000000000000277555756156289135105907917022705078125
0.05 * 0.01 = 0.0005000000000000000277555756156289135105907917022705078125
0.05 / 0.01 = 5.000000000000000277555756156289135105907917022705078125

可以看到,在字符串上对浮点数进行计算的结果是比double要准确的

4.字符串拼接

在Java中先读取到字符串后对后面所有的+和数据都会看成字符串进行拼接

package 测试;
public class Test {
    public static void main(String[] args) {

        int X=100;
        int Y=200;
        System.out.println("X+Y="+X+Y);
        System.out.println(X+Y+"=X+Y");

    }

}

结果:

X+Y=100200
300=X+Y