-128作为Java中的二进制文字

时间:2016-01-29 07:54:20

标签: java

基于java中的byte类型是带符号的8位two's complement整数的事实,为什么第二种声明字节的方式不起作用?

byte ok = -128;
byte notok = 0b10000000;

我的理解是1000000应为-128,但java表示上面的notok变量应该是int而不是byte

2 个答案:

答案 0 :(得分:8)

0b10000000是一个int字面值(= 0b00000000000000000000000010000000),等于+128byte保留8位,不能代表+128。但是,您可以按如下方式实现此目的:

byte notok = (byte) 0b10000000;

答案 1 :(得分:4)

实际上,如Eng Fouad所述, 0b10000000 是整数文字。整数文字创建一个int值,Java中的大小为32位。字节数据类型是一个8位带符号的二进制补码整数。

因此,将整数文字指定为字节类型将不起作用。要在两个不兼容的类型之间创建转换,必须使用强制转换。

 b = (byte)0b10000000;        // (This is narrowing conversion)

此外,-128的带符号2的补码表示为110000000。但是,MSB的1可以被丢弃(代表负号位),因此 10000000 可以作为-128的2的补码表示。