动手动脑和作业 软王
动手动脑1
1.System.out.println(s==t); 输出 false:
说明 Size s = Size.SMALL; 和 Size t = Size.LARGE; 是不同的枚举常量。
2.System.out.println(s.getClass().isPrimitive()); 输出 false:
说明 s 的类型不是原始类型
3.Size u = Size.valueOf("SMALL"); 然后 System.out.println(s == u); 输出 true:
说明 Size.valueOf("SMALL") 方法返回的枚举常量 u 与 s 是同一个对象 Size.SMALL
4.for (Size value : Size.values()) { System.out.println(value); } 将输出所有定义在 Size 枚举中的常量,依次输出 SMALL, MEDIUM, LARGE
结论:枚举类型提供了一种简洁、安全的方式来定义和使用一组常量
动手动脑2
原码(Sign-Magnitude Representation):直接在最左边一位表示符号,0 表示正数,1 表示负数,剩下位表示数的绝对值。
反码(Ones' Complement):负数由其对应的正数所有位取反而得。
补码(Two's Complement):负数由其对应的正数所有位取反再加 1 而得。
public class BinaryOperationsDemo {
public static void main(String[] args) {
int number = 5;
int negativeNumber = -5;
// 输出原数的二进制表示
System.out.println("Original number (5): " + Integer.toBinaryString(number));
System.out.println("Original negative number (-5): " + Integer.toBinaryString(negativeNumber));
// 验证原码、反码和补码
System.out.println("Binary (5): " + String.format("%32s", Integer.toBinaryString(number)).replace(' ', '0'));
System.out.println("Binary (-5): " + String.format("%32s", Integer.toBinaryString(negativeNumber)).replace(' ', '0'));
// 移位操作
System.out.println("After left shift (5 << 1): " + (number << 1));
System.out.println("Binary: " + String.format("%32s", Integer.toBinaryString(number << 1)).replace(' ', '0'));
System.out.println("After right shift logical (5 >> 1): " + (number >> 1));
System.out.println("Binary: " + String.format("%32s", Integer.toBinaryString(number >> 1)).replace(' ', '0'));
System.out.println("After right shift logical (-5 >> 1): " + (negativeNumber >> 1));
System.out.println("Binary: " + String.format("%32s", Integer.toBinaryString(negativeNumber >> 1)).replace(' ', '0'));
System.out.println("After right shift arithmetic (-5 >>> 1): " + (negativeNumber >>> 1));
System.out.println("Binary: " + String.format("%32s", Integer.toBinaryString(negativeNumber >>> 1)).replace(' ', '0'));
// 取反操作
System.out.println("Bitwise NOT (~5): " + ~number);
System.out.println("Binary: " + String.format("%32s", Integer.toBinaryString(~number)).replace(' ', '0'));
System.out.println("Bitwise NOT (~-5): " + ~negativeNumber);
System.out.println("Binary: " + String.format("%32s", Integer.toBinaryString(~negativeNumber)).replace(' ', '0'));
}
}
Java采用补码
动手动脑3
局部变量屏蔽成员变量:在exampleMethod方法中,局部变量x屏蔽了成员变量x,因此在局部范围内使用的x是局部变量。
方法参数屏蔽成员变量:在exampleMethod方法中,方法参数y屏蔽了成员变量y,因此在方法范围内使用的y是方法参数。
for循环变量屏蔽外层变量:在for循环中,循环变量z屏蔽了外层的变量z,因此在循环内使用的z是循环变量。
静态变量与实例变量:静态变量与实例变量可以同名,但在方法中,如果没有特别指明的是哪个变量,将使用实例变量。要访问静态变量,可以通过类名进行访问。
动手动脑4
结论:由位数小和范围小的的数据类型转向大的无精度损失,若由同位数的数据类型转换范围大的向范围小的转换则有精度损失,整型向浮点型转换总有精度损失。
动手动脑5
public class TestDouble {
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.015 * 100 = " + (4.015 * 100));
System.out.println("123.3 / 100 = " + (123.3 / 100));
}
}
使用double类型的数值进行计算, 其结果是不精确的,二进制的计算可能会导致四舍五入
动手动脑6
以下代码的输出结果是什么?
int X=100;
int Y=200;
System.out.println("X+Y="+X+Y);
System.out.println(X+Y+"=X+Y");
为什么会有这样的输出结果?
X+Y =100300
300=X+Y
因为字符串与整数拼接:当字符串与整数用 + 运算符拼接时,整数会自动转换为字符串并与之前的字符串拼接;整数与字符串拼接实是从左往右正常进行。
课后作业2
class pg{
public static void main(String[] args){
for(int i=0;i<30;i++){
int a=(int)(Math.random()100)+1;
int b=(int)(Math.random()100)+1;
int n=(int)(Math.random()3);
char M='0';
switch(n){
case 0:M='+';break;
case 1:M='-';break;
case 2:M='';break;
case 3:M='/';break;
}
System.out.printf("%d%c%d=\n",a,M,b);
}
}
}
浙公网安备 33010602011771号