面試原題:語句【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
"你那么聰明怎么會聽不懂我說的話。"