short a = 128, byte b = (byte)a 強制類型轉換


 1 package 筆試;
 2 
 3 public class ShortToByte {
 4 
 5     /**
 6      * @param args
 7      */
 8     public static void main(String[] args) {
 9         // TODO Auto-generated method stub
10             short a=128;
11             byte b=(byte)a;
12             System.out.println("short強制類型轉換為byte時,a="+a+","+b);
13             byte a1=(byte)128;
14             byte b1=(byte)(-129);
15             System.out.println("int強制類型轉換為byte時,a1="+a1+",b1="+b1);
16     }
17 
18 }

執行結果為:short強制類型轉換為byte時,a=128,-128
int強制類型轉換為byte時,a1=-128,b1=127

跟計算機的數據表示格式有關:負數用補碼表示。

byte類型的數據取值范圍是:-128-127,
例如:byte a=(byte)128;
  byte b=(byte)(-129);
a和b得值分別為-128和127.
這個是Java編碼方式決定的,Java中正數用源碼表示,負數用補碼表示,第一位是符號位。

所以對於128和-129,他們的編碼分別是:
0000 0000 0000 0000 0000 0000 1000 0000
和1111 1111 1111 1111 1111 1111 0111 1111。
使用強制類型轉換之后得到的a和b分別是1000 0000和0111 1111。
對於a來說,1000 0000是負數(第一位為1),它的絕對值是1000 0000即128,
而對於b來說,0111 1111是正數,值為127。 強制轉換的截位本身就帶來數據的損失,所以出來的結果比較怪也是正常。


免責聲明!

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



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