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
提交
取消