Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/380.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
Java 将强制转换应用于基本类型_Java_Casting_Primitive Types - Fatal编程技术网

Java 将强制转换应用于基本类型

Java 将强制转换应用于基本类型,java,casting,primitive-types,Java,Casting,Primitive Types,这个打印的是-128 但是在Java书中,相同的代码输出0 它们之间的区别是什么?128表示为32位整数,整数在二进制中是00000000000000000000000000000000000000000000000000 由于一个字节只有8位,当它被转换为一个字节时,它将变成10000000。因为Java中的所有整数都是使用2的补码的有符号整数,所以第一位1是符号位,因此值变为-128 不知道为什么书上说输出应该是0。你确定书中的例子完全相同吗 关于Java原语类型的更多信息,并有一篇关于两个

这个打印的是-128

但是在Java书中,相同的代码输出0


它们之间的区别是什么?

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);
    }