java初级面试题之byte b = 130;有没有问题的问题

Posted yanggb

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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

 

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

以上是关于java初级面试题之byte b = 130;有没有问题的问题的主要内容,如果未能解决你的问题,请参考以下文章

C#130问,初级程序员的面试宝典

JAVA数据类型及其强制转换

java面试题之synchronized和lock有什么区别

初级Java开发工程师!绝密文档,面试手册全面突击!!!秋招已经到来

经典Python面试题之基础80问 Python开发

面试题之python基础