int類型轉換byte類型


計算機中,int類型占用4個字節,byte類型占用1個字節;

當int類型強轉為byte類型時,計算機會截取最后的八位(1個字節);

由於計算機存儲數據時,都是以補碼的形式進行存儲。

然而,我們通常看到的數卻是計算機存儲的補碼先轉換成反碼,后轉換成原碼,再轉換成十進制呈現的。

 

原碼、反碼與補碼的關系:

正數:  原碼  =  反碼  = 補碼

負數:  原碼取反  = 反碼(符號位不變);  反碼  +  1  = 補碼(符號位上的進位舍棄)

 

舉例:

int a = 128,轉換成二進制形式是0000 0000 0000 0000 0000 0000 1000 0000,

由於正數的原碼=反碼=補碼,因此計算機存儲的是0000 0000 0000 0000 0000 0000 1000 0000。

 

int a = -128,轉換成二進制形式是1000 0000 0000 0000 0000 0000 1000 0000,

由於負數的原碼、反碼與補碼的轉換關系是:原碼取反=反碼(符號位不變),反碼+1=補碼;

反碼:1111 1111 1111 1111 1111 1111 0111 1111

補碼:1111 1111 1111 1111 1111 1111 1000 0000

因此,在計算機中存儲的是1111 1111 1111 1111 1111 1111 1000 0000

 

int a = 128; 

byte b = (byte) a; // b=-128

首先,由上述第一個例子得知,128在計算機中存儲的補碼形式為0000 0000 0000 0000 0000 0000 1000 0000,

此時強制轉換成byte類型的數據時,計算機會自動截取最后的八位(1個字節)1000 0000,

由補碼最高位為1得知,轉換后的數據是一個負數,

根據負數補碼求反碼,我們可以得到該數的反碼是1111 1111,

根據負數反碼求原碼,可得到該數的原碼是1000 0000


免責聲明!

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



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