MessureSpec 常量是:
public static final int AT_MOST = -2147483648
public static final int EXACTLY = 1073741824
public static final int UNSPECIFIED = 0
我知道前2位是10、01、00。
但是我不知道为什么。
答案 0 :(得分:0)
这是来自汇编程序和C的编码模式(习惯?),在嵌入式和图形编程中也很常见,因为它可以转换为紧凑的机器级指令。如果您查看十六进制值:
AT_MOST 0x80000000
EXACTLY 0x40000000
UNSPECIFIED 0x00000000
由于AT_MOST和EXACTLY是单个位,因此您可以单独或与位掩码一起对它们进行测试,例如:
if ((measurespec & AT_MOST) != 0) { .. }
if ((measurespec & (AT_MOST | EXACTLY) != 0) { .. }
if (measurespec == UNSPECIFIED) { .. }
在汇编程序中,它可以转换为紧凑,快速的跳转-大致:
AND measurespec 0x80000000
JNZ
AND measurespec 0xC0000000
JNZ
AND measurespec measurespec
JZ
某些指令集包含针对单个位的跳转/测试,甚至更紧凑。
与JVM指令集等效的是:
if_icmpeq (branch if two ints are equal)
if_icmpne (branch if two ints are equal)