gpt4 book ai didi

java - 使用 int 标志代替 boolean 值

转载 作者:太空狗 更新时间:2023-10-29 12:46:07 25 4
gpt4 key购买 nike

例如,Notification具有以下标志:

public static final int FLAG_AUTO_CANCEL = 0x00000010;

这是数字 16 的十六进制。还有其他具有值的标志:

 0x00000020
0x00000040
0x00000080

每次,它都会增加 2 的幂。将其转换为二进制,我们得到:

 00010000
00100000
01000000
10000000

因此,我们可以使用按位运算符来确定存在哪些标志等,因为每个标志只包含一个 1,并且它们都位于不同的位置。

问题:

这一切都很有道理,但为什么不直接使用 booleans 呢?这仅仅是风格上的,还是有内存或效率上的好处?

编辑:
我知道通过组合它们,我们可以在单个 int 中存储大量信息。这是否单独使用,以便我们可以在单个int 中传递大量boolean 类型值,而不必传递大量参数?我并不是要贬低它,它非常方便,但还有其他好处吗?

最佳答案

你说的是一个Bit Field .一个优点是所有信息都可以包含在单个变量中(没有像 ArrayList 那样的开销)。这对于保持函数签名的整洁很有用,并且由于堆栈操作较少,因此在效率方面会有一些次要的好处,但这可能会被额外的位移位操作所抵消。此外,您可以使用(例如)一个字节来存储 8 个字段,而不是浪费 7 个额外的字节。如果您很聪明,也可以在一次操作中执行多个标志检查。

话虽如此,个人偏好可能会认为 boolean 值列表更清晰或更可取。位域在空间有限或类似性质的嵌入式系统中最常见。

关于您的编辑:它将标志的存储在整数中,但这些只是引用常量——您没有编辑它们,而是将这些位插入(或out of) flags 字段,一个整数。我真的不知道他们为什么为这个应用程序选择一个位域;也许是在编程空间有限的微 Controller 中长大的人编写了该特定类的代码。普遍的共识似乎是位域不应包含在新代码中。

关于java - 使用 int 标志代替 boolean 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18007860/

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