猿问

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

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

int i =132;byte b =(byte)i; System.out.println(b);

Mindboggling。为什么输出-124


千万里不及你
浏览 1232回答 3
3回答

繁星点点滴滴

132数字(基数10)1000_0100以位(基数2)和Java存储int为32位:0000_0000_0000_0000_0000_0000_1000_0100int-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田田!!!

撒科打诨

Java中的字节是有符号的,所以它的范围是-2 ^ 7到2 ^ 7-1 - 即-128到127.由于132高于127,你最终会回绕到132-256 = -124。也就是说,基本上加上或减去256(2 ^ 8)直到它落入范围。有关更多信息,您可能需要阅读两个补码。
随时随地看视频慕课网APP

相关分类

Java
我要回答