(tmp >> 8) & 0xff;


以下是閱讀他人文章后,個人對計算 (tmp >> 8) & 0xff; 的理解:

將tmp轉為二進制數

6322040->11000000111011101111000,向右移16位(清掉該16位),且左邊用0補足16位

00000000000000001100000,將移動后的二進制轉10進,等於96

tmp作為byte類型,計算機存儲的補碼是01100000(8位)

int類型是32位,將tmp作為int傳遞賦值時需要不為,所以補位后的補碼

111111111111111111111111 01100000

 

當byte要轉化為int的時候,高的24位必然會補1,這樣,其二進制補碼其實已經不一致了,&0xff可以將高的24位置為0,低8位保持原樣。這樣做的目的就是為了保證二進制數據的一致性。

即使用了&0xff后的補碼為 000000000000000000000000 01100000 值等於01100000 等於96

 

同理:(tmp >> 8) & 0xff;

6322040->11000000111011101111000->00000000110000001110111(十進轉二進,向右移走8位,向向補0 八位)

 

Byte轉int 8位轉32位,使用0xff將高的24位設為0,低8位保持不變

01110111->11111111111111111111111101110111->000000000000000000000000 01110111=119

 

 

tmp & 0xff;( 十進轉二進,不移動,使用0xff將高的24位設為0,低8位保持不變)

6322040->11000000111011101111000->00000000000000000000000001111000=120

 

 文章源自:https://www.cnblogs.com/think-in-java/p/5527389.html

 


免責聲明!

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



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