我想知道当我在big-endian平台上编写以下java代码时会发生什么:
int a = 1;
byte b = (byte)a;
在小端平台上,变量a的四个字节的布局是x01000000,所以将a转换为一个字节,我们仍然得到x01,这使得b等于1.但是,在big-endian平台上,a是布局为x00000001,那么b还是等于x01吗?如果确实如此,这种魔力是如何发生的?
答案 0 :(得分:1)
操作在CPU中的寄存器中执行,而不是在内存中执行。寄存器既不是大端也不是小端,它们不是随机存取的。
在任何情况下,行为在Java语言规范中定义为在每种情况下保持较低位,因此CPU的工作方式无关紧要。
这种魔力是如何发生的?
没有魔力,CPU只会丢弃更高的位。 (从技术上讲,CPU也可以进行符号扩展,因为许多CPU具有32位或64位寄存器)这些字节在执行此操作之前如何存储在内存中无关紧要。