-128作为Java中的二进制文本
基于java中的-128作为Java中的二进制文本,java,Java,基于java中的byte类型是有符号8位整数这一事实,为什么第二种声明字节的方法不起作用 byte ok = -128; byte notok = 0b10000000; 我的理解是1000000应该是-128,但是java指出上面的notok变量应该是int,而不是字节0b10000000是int文本(=0b000000000000000000000000000000000000000000000000000000),它等于+128字节包含8位,不能表示+128。但是,您可以通过以下方式实现
byte
类型是有符号8位整数这一事实,为什么第二种声明字节的方法不起作用
byte ok = -128;
byte notok = 0b10000000;
我的理解是
1000000
应该是-128
,但是java指出上面的notok
变量应该是int
,而不是字节
0b10000000
是int
文本(=0b000000000000000000000000000000000000000000000000000000
),它等于+128
<代码>字节包含8位,不能表示+128
。但是,您可以通过以下方式实现这一点:
byte notok = (byte) 0b10000000;
实际上,正如
Eng Fouad
所述,0b10000000是一个整数文本。整数文本创建一个int值,在Java中该值的大小是32位。字节数据类型是一个8位有符号2的补码整数
因此,将整数文本分配给字节类型将不起作用。要在两个不兼容的类型之间创建转换,必须使用强制转换
b = (byte)0b10000000; // (This is narrowing conversion)
另外,
-128
的有符号2的补码表示是。但是,MSB的1可以被丢弃(表示负号位),因此10000000可以接受为2的-128补码表示。您的意思是字节包含8位吗?@Uli是的。更正:)根据二的补码定义,1000 0000等于-128。@imrichardcole文本0b10000000
表示int
,而不是字节。这就是为什么。我可以补充一点,int-literal的赋值只在隐式转换中起作用,这可能会更清楚一点。