Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
-128作为Java中的二进制文本_Java - Fatal编程技术网

-128作为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。但是,您可以通过以下方式实现

基于java中的
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的赋值只在隐式转换中起作用,这可能会更清楚一点。