gpt4 book ai didi

java - 为什么Android中的MessureSpec常量是-2147483648, 1073741824, 0

转载 作者:太空宇宙 更新时间:2023-11-04 10:16:28 25 4
gpt4 key购买 nike

MessureSpec 常量为:

public static final int AT_MOST = -2147483648

public static final int EXACTLY = 1073741824

public static final int UNSPECIFIED = 0

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

但我不知道为什么会这样。

最佳答案

这是来自汇编程序和 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)

关于java - 为什么Android中的MessureSpec常量是-2147483648, 1073741824, 0,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51664181/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com