为了账号安全,请及时绑定邮箱和手机立即绑定

Java将int转换为byte时的奇怪行为?

Java将int转换为byte时的奇怪行为?

千万里不及你 2019-07-25 18:59:32
Java将int转换为byte时的奇怪行为?int i =132;byte b =(byte)i; System.out.println(b);Mindboggling。为什么输出-124?
查看完整描述

3 回答

?
繁星点点滴滴

TA贡献1803条经验 获得超3个赞

132数字(基数101000_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田田!!!


查看完整回答
反对 回复 2019-07-25
?
撒科打诨

TA贡献1934条经验 获得超2个赞

Java中的字节是有符号的,所以它的范围是-2 ^ 7到2 ^ 7-1 - 即-128到127.由于132高于127,你最终会回绕到132-256 = -124。也就是说,基本上加上或减去256(2 ^ 8)直到它落入范围。

有关更多信息,您可能需要阅读两个补码


查看完整回答
反对 回复 2019-07-25
  • 3 回答
  • 0 关注
  • 1231 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信