gpt4 book ai didi

javascript - 标志位计算和检测

转载 作者:数据小太阳 更新时间:2023-10-29 05:59:33 25 4
gpt4 key购买 nike

在我正在处理的一些代码中,我应该处理十个独立的参数,它们可以采用两个值之一(0 或 1)。这会创建 2^10 个不同的条件。有些情况永远不会发生,可以忽略不计,但确实发生的情况仍然很多,并且制作一个 switch 来处理所有情况是疯狂的。

我想使用 10 个 if 语句而不是一个巨大的 switch。为此,我知道我应该使用标志位,或者更确切地说是标志字节,因为语言是 javascript,它更容易使用 10 字节字符串来表示 10 位二进制文​​件。

现在,我的问题是,我不知道如何实现它。我在 API 中看到过这种用法,其中使用数字 1、2、4、8、...、n^(n-1) 公开了多个 optional ,它们是 1 的十进制等价物,二进制的 10、100、1000 等。因此,如果我们像 bar = foo(7) 那样调用,bar 将是一个对象,具有最右边的三个标志启用的任何选项。

我可以将十进制数转换为二进制数,并在每个 if 语句中检查是否设置了相应的数字。但我想知道,有没有办法确定一个十进制数的 n-th 位是二进制形式的零或一,无需实际进行转换?

最佳答案

只需使用按位与。在 C/C++ 中,这将是:

if (flags & 1) {
// Bit zero is set.
}
if (flags & 2) {
// Bit one is set.
}
if (flags & 4) {
// Bit two is set.
}
...

为了生产良好,使用标志掩码的符号名称而不是魔数(Magic Number),1、2、4、8 等。

如果标志在某种程度上是同类的(例如,它们在某些几何问题中代表十个空间维度)并且处理每种情况的代码是相同的,则可以使用循环:

for (int f = 0; f < 10; ++f) {
if (flags & (1 << f)) {
// Bit f is set.
}
}

关于javascript - 标志位计算和检测,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2707484/

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