最近我遇到这样的一条线
public final static int DELETION_MASK = 0x01;
为什么不像
public final static int DELETION_MASK = 1;
使用除0xA以外的第一种方法是否有任何优势,并且可以轻松转换上限十六进制? 在这种情况下,它只是一个代表1的常数。
它是掩码的通用可读性约定,似乎是,请参见stackoverflow.com/questions/243712/why-use-hex(其c ++原理相同)
尽管编译器生成的代码没有区别,但是位掩码传统上是使用十六进制表示法编写的,因为对于人类而言,转换为二进制格式要容易得多。另一个常见的约定是在已知字段长度时包括前导零。例如。对于C int字段,通常编写:
#define MASK 0x0000ffff
另外,十六进制常量向程序员表明它可能是位掩码,或者是某种涉及位运算的值,应该对其进行特殊处理。
另外,十六进制表示法还可以避免出现负数的问题:0xffffffff实际上是负数(确切地说是-1)。您可以仅用十六进制指定掩码并完成操作,而不必处理符号和2的补码。
从Java 7开始,您还可以使用二进制文字,这使人类更容易理解位掩码中设置了哪些位。二进制文字可能会使用下划线将这些位放入单独的组中。
这意味着以下内容也有效:
public final static int DELETION_MASK = 0b0000_0001;
因此,我认为唯一的优势是可读性,与性能无关
太棒了 感谢您详细解释。