码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2020-06-16 23:47:28      阅读:89      评论:0      收藏:0      [点我收藏+]

标签:计算机   rgs   超出   nbsp   范围   style   sys   byte   补码   

面试原题:语句【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;】有没有问题的问题

标签:计算机   rgs   超出   nbsp   范围   style   sys   byte   补码   

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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!