有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

endianness基础平台为big endian时的java数值类型转换

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

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

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


共 (1) 个答案

  1. # 1 楼答案

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

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

    how does this magic happen?

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