JAVA课上课后问题总结(2019.09.20)
一、关于原码,反码,补码。
原码,反码,补码都是计算机存储数字的编码方式,其中计算机内部用补码的形式存取数据。
原码
原码就是符号位加上真值的绝对值,即首位为符号位(1表示负,0表示正)其后表示其值。如:
3 的原码 --> 0000 0000 0000 0000 0000 0000 0000 0011 -3 的原码 --> 1000 0000 0000 0000 0000 0000 0000 0011
反码
正数的反码是其本身不变,
负数的反码是在其本身基础上,符号位不变其余各位取反。如:
3 的原码 --> 0000 0000 0000 0000 0000 0000 0000 0011 -3 的原码 --> 1000 0000 0000 0000 0000 0000 0000 0011 3 的反码 --> 0000 0000 0000 0000 0000 0000 0000 0011 -3 的反码 --> 1111 1111 1111 1111 1111 1111 1111 1100
补码
正数的补码是其本身不变,
负数的补码是其反码加1.如:
3 的原码 --> 0000 0000 0000 0000 0000 0000 0000 0011 -3 的原码 --> 1000 0000 0000 0000 0000 0000 0000 0011 3 的反码 --> 0000 0000 0000 0000 0000 0000 0000 0011 -3 的反码 --> 1111 1111 1111 1111 1111 1111 1111 1100 10 的补码 --> 0000 0000 0000 0000 0000 0000 0000 1010 -10 的补码 --> 1111 1111 1111 1111 1111 1111 1111 1101
二、动手动脑:实例EnumTest.java
源码:
1 public class EnumTest { 2 3 public static void main(String[] args) { 4 Size s=Size.SMALL; 5 Size t=Size.LARGE; 6 //s和t引用同一个对象? 7 System.out.println(s==t); // 8 //是原始数据类型吗? 9 System.out.println(s.getClass().isPrimitive()); 10 //从字符串中转换 11 Size u=Size.valueOf("SMALL"); 12 System.out.println(s==u); //true 13 //列出它的所有值 14 for(Size value:Size.values()){ 15 System.out.println(value); 16 } 17 } 18 19 } 20 enum Size{SMALL,MEDIUM,LARGE};
运行结果如下:
在java中,使用枚举类型可以代替常量,这是由于常量没有命名空间,使用起来不方便,使用枚举可以使代码更具维护性。
从运行结果前两行可以看出,枚举类型不是原始数据类型,因此它是一种引用,而不同值的引用是不同的,“==”直接对比枚举变量的值。
从运行结果第三行可以看出,枚举类型的字符串转换是正确的。
从运行结果后三行可以看出,枚举类型可被视为对象数组,并能进行正常输出。
三、动手实验:实例TestDouble.java
源码:
1 public class TestDouble { 2 3 public static void main(String args[]) { 4 System.out.println("0.05 + 0.01 = " + (0.05 + 0.01)); 5 System.out.println("1.0 - 0.42 = " + (1.0 - 0.42)); 6 System.out.println("4.015 * 100 = " + (4.015 * 100)); 7 System.out.println("123.3 / 100 = " + (123.3 / 100)); 8 } 9 }
运行结果如下:
由运行结果可以看出,double类型的运算结果是不精确的,这和double类型数据存储方式有关。
四、动手动脑:关于输出
源码:
1 public class Test { 2 3 public static void main(String[] args) { 4 int X=100; 5 int Y=200; 6 System.out.println("X+Y="+X+Y); 7 System.out.println(X+Y+"=X+Y"); 8 } 9 10 }
运行结果如下:
由运行结果可以看出,在输出时,双引号里可视为字符串输出,而加号则用来连接字符串,想要输出X+Y应该加括号。