底层平台为big-endian时的java数字类型转换
我想知道在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,
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位寄存器)在进行符号扩展之前,这些字节是如何存储在内存中的并不重要