当底层平台是big endian时,java数字类型conviersion

时间:2014-05-18 12:26:56

标签: java endianness

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

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

在小端平台上,变量a的四个字节的布局是x01000000,所以将a转换为一个字节,我们仍然得到x01,这使得b等于1.但是,在big-endian平台上,a是布局为x00000001,那么b还是等于x01吗?如果确实如此,这种魔力是如何发生的?

1 个答案:

答案 0 :(得分:1)

操作在CPU中的寄存器中执行,而不是在内存中执行。寄存器既不是大端也不是小端,它们不是随机存取的。

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

  

这种魔力是如何发生的?

没有魔力,CPU只会丢弃更高的位。 (从技术上讲,CPU也可以进行符号扩展,因为许多CPU具有32位或64位寄存器)这些字节在执行此操作之前如何存储在内存中无关紧要。