2024.9.24-课后试验问题整理

1、java中字符和字符串用equals()方法进行判断是否相等。"=="比较的是地址

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
枚举类的值是特定的对象,若相同则引用同一个对象。所以比较枚举类时可以用==也能用equals()方法。
2、
原码:最高位时符号位,0代表正数,1代表负数,非符号位为该数字绝对值的二进制。
反码:正数的反码与原码一致,负数的反码是对原码按位取反,符号位不变。
补码:正数的补码与原码一致,负数的补码是对原码按位取反加1,符号位不变。

import java.util.Scanner;

public class BitwiseOperations {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        System.out.print("请输入一个正数或负数: ");
        int number = scanner.nextInt();

        System.out.println("你输入的数是: " + number);
        System.out.println("其二进制表示: " + Integer.toBinaryString(number));

        // 按位与操作
        int andResult = number & 111; // 与1取与操作
        System.out.println("按位与操作 (与100): " + andResult + " (" + Integer.toBinaryString(andResult) + ")");

        // 按位或操作
        int orResult = number | 1; // 与1取或操作
        System.out.println("按位或操作 (或1): " + orResult + " (" + Integer.toBinaryString(orResult) + ")");

        // 按位异或操作
        int xorResult = number ^ 1; // 与1取异或操作
        System.out.println("按位异或操作 (异或1): " + xorResult + " (" + Integer.toBinaryString(xorResult) + ")");

        // 按位取反操作
        int notResult = ~number; // 取反
        System.out.println("按位取反操作: " + notResult + " (" + Integer.toBinaryString(notResult & 0xFFFFFFFF) + ")");

        // 左移操作
        int leftShiftResult = number << 1; // 左移1位
        System.out.println("左移操作 (左移1位): " + leftShiftResult + " (" + Integer.toBinaryString(leftShiftResult) + ")");

        // 右移操作
        int rightShiftResult = number >> 1; // 右移1位
        System.out.println("右移操作 (算术右移1位): " + rightShiftResult + " (" + Integer.toBinaryString(rightShiftResult) + ")");

        // 逻辑右移操作 (与无符号右移)
        int unsignedRightShiftResult = number >>> 1; // 逻辑右移1位
        System.out.println("逻辑右移操作 (无符号右移1位): " + unsignedRightShiftResult + " (" + Integer.toBinaryString(unsignedRightShiftResult & 0xFFFFFFFF) + ")");

        scanner.close();
    }
}

输出结果:
请输入一个正数或负数: 100
你输入的数是: 100
其二进制表示: 1100100
按位与操作 (与100): 100 (1100100)
按位或操作 (或1): 101 (1100101)
按位异或操作 (异或1): 101 (1100101)
按位取反操作: -101 (11111111111111111111111110011011)
左移操作 (左移1位): 200 (11001000)
右移操作 (算术右移1位): 50 (110010)
逻辑右移操作 (无符号右移1位): 50 (110010)

Process finished with exit code 0

请输入一个正数或负数: -100
你输入的数是: -100
其二进制表示: 11111111111111111111111110011100
按位与操作 (与100): 12 (1100)
按位或操作 (或1): -99 (11111111111111111111111110011101)
按位异或操作 (异或1): -99 (11111111111111111111111110011101)
按位取反操作: 99 (1100011)
左移操作 (左移1位): -200 (11111111111111111111111100111000)
右移操作 (算术右移1位): -50 (11111111111111111111111111001110)
逻辑右移操作 (无符号右移1位): 2147483598 (1111111111111111111111111001110)

Process finished with exit code 0

通过观察按位与操作结果,可以得出结论,java中的数据采用补码表示的。
3、在java中数据类型较小的转化为数据类型较大的无精度损失,反过来会造成精度损失。
4、浮点数在计算机中以二进制的方式存储,所以无法完全精确的表示十进制分数。
public class Test {
public static void main(String[]args) {
System.out.println("0.05+0.01=" + (0.05 + 0.01));
System.out.println("1.0-0.42=" + (1.0 - 0.42));
System.out.println("4.015100=" + (4.015 * 100));
System.out.println("123.3/100" + (123.3 / 100));
}
}
运行结果:
0.05+0.01=0.060000000000000005
1.0-0.42=0.5800000000000001
4.015
100=401.49999999999994
123.3/1001.2329999999999999
5、在java中字符串用“+”连接。如果是字符串+数字,则根据加号前面的判断最终的结果。如果加号前面是字符串,则加号后面会被默认为字符串来进行计算。

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
6、出30道计算题:

import java.util.Scanner;
public class Test {
    public static void main(String[]args) {
        Math.random();
        Scanner s=new Scanner(System.in);
        int n=0;
        for(int i=0;i<30;i++){
            String c=s.nextLine();
            switch(c){
                case "+":
                    System.out.println((int)(Math.random()*100)+"+"+((int)(Math.random()*100)));
                    break;
                case "-":
                    System.out.println((int)(Math.random()*100)+"-"+((int)(Math.random()*100)));
                    break;
                case "*":
                    System.out.println((int)(Math.random()*100)+"*"+((int)(Math.random()*100)));
                    break;
                case "/":
                    System.out.println((int)(Math.random()*100)+"/"+((int)(Math.random()*100)));
                    break;
                default:
                    System.out.println("重新输入");
            }
        }
posted @ 2024-09-24 19:58  呓语-MSHK  阅读(6)  评论(0)    收藏  举报