按位运算的结果是否依赖于Java中的endianess?在C或C++中呢?

Jos*_* D. 2 c c++ java endianness bitwise-operators

请考虑以下代码:

long store;
int firstValue = 0x1234;
int secondValue = 0x5678;
store = (((long) firstValue) << 32) | secondValue;
Run Code Online (Sandbox Code Playgroud)

store保证具有价值0x12345678,无论机器的字节序的......

  • 在Java?
  • 在C或C++?

R. *_*des 8

所有这些语言中的bitshift操作都在数字上运行.字节序不是数字的属性.

在Java store保证具有价值0x123400005678L,因为0x1234L << 320x123400000000L.

在C和C++ store中不保证具有任何特定值:结果取决于所涉及类型的大小,并且由于溢出而具有潜在的未定义行为(long允许小到32位,实际上它是如此)一些主流实现).如果没有发生溢出,则结果与Java中的结果相同.