我不理解Java中二进制数的行为

Иго*_*кий 0 java binary

我有以下代码:

System.out.println(0b11111111);
System.out.println((byte) 0b11111111);
Run Code Online (Sandbox Code Playgroud)

第一行打印

255

并打印第二行

-1

请问有人可以解释一下为什么结果会有所不同?(byte)铸造如何改变0b11111110它变成的数字-1

谢谢!

Era*_*ran 5

byte类型的范围是-128到127.由于255不是有效的字节值,因此11111111在转换为字节时二进制数为-1.

如果不转换0b11111111byte,则它(默认情况下)保持int为a,255是有效值int.