课后作业2

一,原码补码和反码;

原码:将最高位作为符号位(0表示正,1表示负),其它数字位代表数值本身的绝对值的数字表示方式。

反码:如果是正数,则表示方法和原码一样;如果是负数,符号位不变,其余各位取反,则得到这个数字的反码表示形式。
补码:如果是整数,则表示方法和原码一样;如果是负数,则将数字的反码加上1(相当于将原码数值位取反然后在最低位加1)。
二,由于s和t并为引用同一个对象,所以s和t的值也不一样,所以第一个输出结果为false。而s和t也并不是原始数据。第二个输出结果也为false,而第三个结果中由于开始Size s=Size.SMALL;而Size u=Size.valueOf("SMALL");所以s==u,所以输出为true。枚举类型是一种基本数据类型,而不是一种构造类型。枚举类型不属于原始数据类型,他的每个具体值都引用一个特定对象。
三,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));
输出结果为:
       0.05+0.01=0.060000000000000005
       1.0-0.42=0.5800000000000001
       4.015*100=401.49999999999994
       123.3/100=1.2329999999999999
四,System.out.println("x+y="+x+y);的输出结果是x+y=100200,System.out.println(x+y+"=x+y");的输出结果是300=x+y,x+y在前表示的便是x,y的两个值相加,而x,y在后表示挨个输出x,y的值。所以会出现这样的结果。
五,为什么double类型的数值进行运算得不到“数学上精确的”结果?
N进制可以理解为:数值×基数的幂,例如我们熟悉的十进制数123.4=1×10²+2×10+3×(10的0次幂)+4×(10的-1次幂);其它进制的也是同理,例如二进制数11.01=1×2+1×(2的0次幂)+0+1×(2的-2次幂)=十进制的3.25。
double类型的数值占用64bit,即64个二进制数,除去最高位表示正负符号的位,在最低位上一定会与实际数据存在误差。
简单来说就是我们给出的数值,在大多数情况下需要比64bit更多的位数才能准确表示出来,而double类型的数值只有64bit,后面舍去的位数一定会带来误差,无法得到“数学上精确”的结果
五,参考解答;
所以经过程序每次运行,都会得到不同的字符串。



 
       
原文地址:https://www.cnblogs.com/yangqqq/p/11553739.html