Java將int轉換為byte時的奇怪行為?int i =132;byte b =(byte)i; System.out.println(b);Mindboggling。為什么輸出-124?
3 回答

繁星點點滴滴
TA貢獻1803條經驗 獲得超3個贊
132
數字(基數10)1000_0100
以位(基數2)和Java存儲int
為32位:
0000_0000_0000_0000_0000_0000_1000_0100
int-to-byte的算法是left-truncate; 算法System.out.println
是二進制補碼(二進制補碼是最左邊的位是1
,解釋為負的一個補碼(反轉位)減一。); 因此System.out.println(int-to-byte(
))
是:
interpre-as(if-leftmost-bit-is-1 [negative(invert-bits(minus-one(] left-truncate(
0000_0000_0000_0000_0000_0000_1000_0100
)[)))])= interpret-as(if-leftmost-bit-is-1 [negative(invert-bits(minus-one(]
1000_0100
[)))))= interpret-as(negative(invert-bits(minus-one(
1000_0100
))))= interpret-as(negative(invert-bits(
1000_0011
)))= interpret-as(negative(
0111_1100
))=解釋-AS(負(124))
=解釋-AS(-124)
= -124田田!!!
添加回答
舉報
0/150
提交
取消