java初级面试题之【byte b = 130;】有没有问题的问题
面试原题:语句【byte b = 130;】有没有问题?有什么问题?如果我想让赋值正确,可以怎么做?结果是多少呢?
答:有问题,赋值超出数据类型范围。想让赋值正确,可以在赋值前进行强制类型转换,截取最低一个字节。结果是-126。
先上代码测试一下。
class TestByteRange { public static void main(String[] args) { // 因为byte的范围是:-128到127。(-2^7--2^7-1) // 而130不在此范围内,所以报错 // byte b = 130; // 我们可以使用强制类型转换,截取最低一个字节 byte b = (byte) 130; // 结果是多少呢? System.out.println(b);//-126 } }
强制类型转换,截取最低一个字节的原理分析:
我们要想知道结果是什么,就应该知道是如何进行计算的。 而我们又知道计算机中数据的运算都是补码进行的。 而要得到补码,首先要计算出数据的二进制。
1.获取130这个数据的二进制。00000000 00000000 00000000 10000010这是130的原码,也是反码,还是补码。
2.做截取操作,截成byte类型。10000010这个结果是补码。
3.已知补码求原码。
补码:1 0000010
反码:1 0000001
原码:1 1111110
"你那么聪明怎么会听不懂我说的话。"
你要去做一个大人,不要回头,不要难过。