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应该加括号。

posted on 2019-09-19 17:40  pjhhh  阅读(185)  评论(0编辑  收藏  举报