底层平台为big endian时java数值类型转换

标签 java endianness

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

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

在little-endian平台上,变量a的四个字节的布局是x01000000,所以将a转换为字节,我们仍然得到x01,这使得b等于1。但是,在big-endian平台上,a是布局为 x00000001,那么 b 仍然等于 x01 吗?如果是的话,这个魔法是如何发生的?

最佳答案

操作是在CPU的寄存器中执行的,而不是在内存中。寄存器既不是大尾数也不是小尾数,并且不能随机访问。

无论如何,Java 语言规范中将行为定义为在每种情况下都保留较低位,因此 CPU 如何工作并不重要。

how does this magic happen?

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

关于底层平台为big endian时java数值类型转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23721865/

相关文章:

java - Spring *-servlet.xml 在 Websphere 服务器启动时未加载

java - 如何比较两个 long 的高 40 位

ocaml - OCaml 字节码的可移植性

java - 如何更新bashrc文件中的JAVA_HOME

java - Android 无法找到显式 Activity 类

c++ - Boost Binary Endian 解析器不工作?

Java - 将 Big Endian 二进制字符串转换为 Little Endian

python - 为什么struct中第一个打包的数据是little endian,而其余的都是big endian?

java - pdfBox 向 pdf 添加不同的行

JavaFX隐藏id列