为什么Android中的MessureSpec常量-2147483648、1073741824、0

时间:2018-08-03 01:34:54

标签: java android

MessureSpec 常量是:

public static final int AT_MOST = -2147483648

public static final int EXACTLY = 1073741824

public static final int UNSPECIFIED = 0

我知道前2位是10、01、00。

但是我不知道为什么。

1 个答案:

答案 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)