第一题:
byte b1=3,b2=4,b;
b=b1+b2;
b=3+4;
哪句是编译失败的呢?为什么呢?
1.答案是 b = b1 + b2; 这句,因为在Java语言中整数在进行运算时都会默认int类型的变量进行运算,所以这句编译失败。
第二题:
byte by = 130;有没有问题?有问题如何解决?结果是多少呢?
2.有,强制转换就可以:byte by = (byte)130; ,结果:
(1).130 ---- 00000000 00000000 00000000 10000010 这是130的 二进制 同时是原码,反码,也是补码;
(2).由于强制转换为byte类型,已知byte类型是1字节8位,所以截取前面3字节16位,得到的结果是10000010(因为是正数,所以10000010也是130的补码,又因为它超过了取值范围,所以要把它转为原码,才是结果);
(3).已知补码求原码(-1得反码,取绝对值保留符号位不变得原码):
符号位 数值位
补码 1 0000010
反码 1 0000001
原码 1 1111110
结果是 -126;
第三题:
byte by = -130;有没有问题?有问题如何解决?结果是多少呢?
2.有,强制转换就可以:byte by = (byte)-130; ,结果:
(1).-130 ---- 10000000 00000000 00000000 10000010 这是-130的 二进制补码(因为在计算机中负数是用补码来计算的);
(2).由于强制转换为byte类型,已知byte类型是1字节8位,所以截取前面3字节16位,得到的结果是10000010(因为是负数,而且超过了byte类型的取值范围(10000000(-128)-01111111(127)),所以要计算它的原码);
(3).已知补码求原码(-1得反码,取绝对值保留符号位不变得原码):
符号位 数值位
补码 1 0000010
反码 1 0000001
原码 1 1111110
得到以上结果并不是最终结果,因为他是负数的原码,所以要去掉前面的符号位,得到126,
最终结果为 126;
第四题:
byte by = 300;有没有问题?有问题如何解决?结果是多少呢?
2.有,强制转换就可以:byte by = (byte)300; ,结果:
(1).300 ---- 00000000 00000000 00000001 00101100 这是300的 二进制 原码;
(2).由于强制转换为byte类型,已知byte类型是1字节8位,所以截取前面3字节16位,得到的结果是00101100(因为是正数,所以00101100也是130的原码);
(3).00101100转换为十进制为44,
最终结果为44;