Java 将强制转换应用于基本类型
这个打印的是-128 但是在Java书中,相同的代码输出0Java 将强制转换应用于基本类型,java,casting,primitive-types,Java,Casting,Primitive Types,这个打印的是-128 但是在Java书中,相同的代码输出0 它们之间的区别是什么?128表示为32位整数,整数在二进制中是00000000000000000000000000000000000000000000000000 由于一个字节只有8位,当它被转换为一个字节时,它将变成10000000。因为Java中的所有整数都是使用2的补码的有符号整数,所以第一位1是符号位,因此值变为-128 不知道为什么书上说输出应该是0。你确定书中的例子完全相同吗 关于Java原语类型的更多信息,并有一篇关于两个
它们之间的区别是什么?128表示为32位整数,整数在二进制中是00000000000000000000000000000000000000000000000000 由于一个字节只有8位,当它被转换为一个字节时,它将变成10000000。因为Java中的所有整数都是使用2的补码的有符号整数,所以第一位1是符号位,因此值变为-128 不知道为什么书上说输出应该是0。你确定书中的例子完全相同吗
关于Java原语类型的更多信息,并有一篇关于两个补码的相当全面的文章。看,128=0x80,因此,如果您删除除低有效字节以外的所有字节,您将得到1000 0000个二进制。这是字节的-128。
因此,您的java书中有一个错误:在java中,这应该真正打印-128。如果a=256,则应打印0。
字节是从-128到127的,所以如果你强制转换127,它是127,128是-128,因为127+1=-128。正确答案已经发布了,但我想把它扩展一点 为了更好地理解它是如何工作的,试着从其他来源了解它@丹尼尔吉布斯提供了一些你可以使用的 我建议您也尝试运行以下代码:
int a=128;
byte b;
b=(byte)a;
System.out.println(b);
这段代码的输出应该让您清楚地看到低有效位和最高有效位的含义,它们决定int中的符号位,以及它们如何适合字节类型
PS-256不是1000000000000000000100000000,而是111111111111111111111110000000000。什么书?这是什么语言?你在什么环境下测试?-128是正确的。另一方面,256将以相同的操作顺序打印零。感谢您提供的信息。书中可能有问题。
for (int a = -256; a < 256; a++) {
byte b = (byte) a;
System.out.println(a + " -> " + b);
}