Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/374.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
底层平台为big-endian时的java数字类型转换_Java_Endianness - Fatal编程技术网

底层平台为big-endian时的java数字类型转换

底层平台为big-endian时的java数字类型转换,java,endianness,Java,Endianness,我想知道在big-endian平台上编写以下java代码时会发生什么: int a = 1; byte b = (byte)a; 在一个小的endian平台上,变量a的四个字节的布局是x01000000,所以将a转换成一个字节,我们仍然得到x01,这使得b等于1。然而,在一个大端平台上,a的布局是x00000001,那么b仍然会等于x01吗?如果是这样的话,这种神奇是如何发生的?操作是在CPU的寄存器中执行的,而不是在内存中。寄存器既不是big-endian,也不是little-endian,

我想知道在big-endian平台上编写以下java代码时会发生什么:

int a = 1;
byte b = (byte)a;

在一个小的endian平台上,变量a的四个字节的布局是x01000000,所以将a转换成一个字节,我们仍然得到x01,这使得b等于1。然而,在一个大端平台上,a的布局是x00000001,那么b仍然会等于x01吗?如果是这样的话,这种神奇是如何发生的?

操作是在CPU的寄存器中执行的,而不是在内存中。寄存器既不是big-endian,也不是little-endian,它们不是随机访问的

在任何情况下,Java语言规范都将这种行为定义为在每种情况下都保留较低的位,因此CPU的工作方式无关紧要

这种魔法是怎么发生的

没有魔法,CPU只是丢弃较高的位。(从技术上讲,CPU也可以进行符号扩展,因为许多CPU都有32位或64位寄存器)在进行符号扩展之前,这些字节是如何存储在内存中的并不重要