zoukankan      html  css  js  c++  java
  • 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

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

  • 相关阅读:
    ES6新语法之---块作用域let/const(2)
    sass变量
    Ruby(或cmd中)输入命令行编译sass
    sass的安装
    鼠标滚动兼容
    HTML5新标签兼容——> <!--<if lt IE 9><!endif-->
    #include stdio.h(7)
    #include stdio.h(6)
    #include stdio.h(5)
    #include stdio.h(3)
  • 原文地址:https://www.cnblogs.com/yanggb/p/11174710.html
Copyright © 2011-2022 走看看