1.(1)byte b1 =3, b2 =4, b;(2) b = b1 + b2;(3) b =3+4;
哪句编译失败?为什么呢?
*** 第(2)句编译失败, b1和b2都是byte类型的, 进行加法运算时会默认类型提升到int, 而左边的b类型还是byte类型和右边类型不一致, 编译器会报错。
第(3)句正确, 等号右边是两个常量进行运算,只要结果不超过byte的范围,就不会报错。
2.byte b =130;有没有问题? 如果我想让赋值正确,可以怎么做?结果是多少呢?***130超过byte的最大范围127, 肯定有问题。
第一种办法:int b =130; 把b定义为int类型, 结果还是130。
第二种办法:byte b =(byte)130; 把130强转为byte类型, 结果为-126。正数的最高符号位为0, 负数的最高符号位1, 强转为byte类型会损失精度,通过计算机的原码反码补码最后计算为-126。
2. 运算符相关
1.(1)short s =1, s = s +1;(2)short s =1, s +=1;
上面两个代码有没有问题,如果有,哪里有问题?*** 第一句有问题, s +1 运算时,short会默认类型提升到int, 而用short s接收会报错。
第二句没问题,+= 运算符其实隐含了默认转换功能 s +=1 其实等价于s =(s的数据类型)(s+1);2. 请用最有效的方式写出 2 乘以 8 的结果。
***2<<3; 移位运算符的特点。