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

 

"你那么聰明怎么會聽不懂我說的話。"


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM