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

"你那么聪明怎么会听不懂我说的话。"

原文地址:https://www.cnblogs.com/yanggb/p/11174710.html