使用0x01而不是1作为整数变量的优点?
最近我遇到了这样的一条线
公共最终静态 int DELETION_MASK = 0x01;
为什么它不像
公共最终静态 int DELETION_MASK = 1;
使用除0xA之外的第一种方法是否有任何优势,并且可以轻松转换上限十六进制数?在本例中,它只是一个表示 1 的常量。
最近我遇到了这样的一条线
公共最终静态 int DELETION_MASK = 0x01;
为什么它不像
公共最终静态 int DELETION_MASK = 1;
使用除0xA之外的第一种方法是否有任何优势,并且可以轻松转换上限十六进制数?在本例中,它只是一个表示 1 的常量。
虽然编译器生成的代码没有区别,但位掩码传统上是使用十六进制表示法编写的,因为人类转换为二进制形式要容易得多。另一个常见的约定是在字段长度已知时包括前导零。例如,对于C字段,通常编写:int
#define MASK 0x0000ffff
此外,十六进制常量向程序员表明,它可能是一个位掩码,或者是一个将以某种方式参与按位运算的值,可能应该特别对待。
作为奖励,十六进制表示法也可以避免负数的问题:实际上是负数(确切地说)。与其玩弄符号和2的补码数,不如用十六进制指定掩码并完成它。0xffffffff
-1
从Java 7开始,您还可以使用二进制文本,这使得人类更容易理解哪些位是在位掩码中设置的。二进制文本可以利用下划线将位放入单独的组中。
这意味着以下内容也是有效的:
public final static int DELETION_MASK = 0b0000_0001;
它有助于整数值和它所表示的位模式之间的心理转换,这对于标志和掩码很重要。
因为16是2的幂(不像10),所以你可以重复这样的事情:
public final static int A_FLAG = 0x01; // 00000001
public final static int B_FLAG = 0x02; // 00000010
public final static int C_FLAG = 0x04; // 00000100
public final static int D_FLAG = 0x08; // 00001000
public final static int E_FLAG = 0x10; // 00010000
public final static int F_FLAG = 0x20; // 00100000
public final static int G_FLAG = 0x40; // 01000000
public final static int H_FLAG = 0x80; // 10000000