基于bytejava 中的类型是带符号的8位 二进制补码整数的事实,为什么第二种声明字节的方式不起作用?
byte ok = -128;
byte notok = 0b10000000;
Run Code Online (Sandbox Code Playgroud)
我的理解是1000000应该是-128但是java表明notok上面的变量应该是a int而不是abyte
0b10000000是一个等于的int文字(= 0b00000000000000000000000010000000)+128.byte保持8位,不能代表+128.但是,您可以按如下方式实现此目的:
byte notok = (byte) 0b10000000;
Run Code Online (Sandbox Code Playgroud)
实际上,如所述Eng Fouad,0b10000000是整数文字。整数文字会创建一个int值,在Java中其大小为32位。字节数据类型为8位带符号的二进制补码整数。
因此,将整数文字分配给字节类型将不起作用。要在两种不兼容的类型之间创建转换,必须使用强制转换。
b = (byte)0b10000000; // (This is narrowing conversion)
Run Code Online (Sandbox Code Playgroud)
另外,的带符号2的补码表示形式-128是110000000。但是,MSB的1可以被丢弃(表示负号位),因此10000000作为-128的2的补码表示是可以接受的。
| 归档时间: |
|
| 查看次数: |
604 次 |
| 最近记录: |