Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/344.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Java中,为按位操作假定一定大小的基元类型安全吗?_Java_64 Bit - Fatal编程技术网

在Java中,为按位操作假定一定大小的基元类型安全吗?

在Java中,为按位操作假定一定大小的基元类型安全吗?,java,64-bit,Java,64 Bit,考虑到Java的“一次编写,在任何地方运行”的范例,以及Java教程为所有原始数据类型提供了明确的位大小,而没有丝毫暗示这取决于任何内容,我想说,是的,int始终是32位的 但是有什么警告吗?定义了值范围,但没有说明内部表示,我想它可能不应该这样做。然而,我有一些代码对假定为32位宽度的int变量执行逐位操作,我想知道这些代码在所有体系结构上是否安全 对于这类问题,是否有很好的深入资源?无论本机体系结构如何,Java代码总是像Int是32位一样工作 在规范中,还有关于表示的明确规定: 整数类型为

考虑到Java的“一次编写,在任何地方运行”的范例,以及Java教程为所有原始数据类型提供了明确的位大小,而没有丝毫暗示这取决于任何内容,我想说,是的,
int
始终是32位的

但是有什么警告吗?定义了值范围,但没有说明内部表示,我想它可能不应该这样做。然而,我有一些代码对假定为32位宽度的
int
变量执行逐位操作,我想知道这些代码在所有体系结构上是否安全


对于这类问题,是否有很好的深入资源?

无论本机体系结构如何,Java代码总是像Int是32位一样工作

在规范中,还有关于表示的明确规定:

整数类型为byte、short、int和long,其值分别为8位、16位、32位和64位带符号的两位补码整数,以及char,其值为表示UTF-16代码单元的16位无符号整数


是的,Java中没有sizeof运算符

根据Bruce Eckel在Java中的想法:

  • short
    :16位
  • int
    :32位
  • :64位

这些值在不同的体系结构之间没有差异。

您可能还需要检查:每个按位操作都会得到它的操作码(ISHL、IOR、IAND等)

虽然Java原语的行为在语言规范中被完全准确地指定,但有一个警告:在64位体系结构上,INT可能是字对齐的,这意味着一个数组的int(或任何非64位的原始类型)可以占用32位java内存的两倍。

这不是一个答案,因为已经有了一个很好的答案,但是我想我会指出,java的原因是这样的,但不是C或C++是java编译成一个虚拟机(Java VM或JVM)。. 因为JVM运行相同的字节码,并且无论它在哪台机器上都具有相同的内部结构,所以它在每台机器上的基本类型的大小似乎是相同的。C和C++没有试图模仿任何特定的行为,并且在各种机器上都受到处理器实现的奇思乱想。在发现更多的代码之后,我发现了引用,然后添加了它。语言是否被编译成字节码,以及它是否具有跨平台的原始大小是独立的。