将位掩码转换回9个布尔值

Euthyphro

我有以下代码,该代码为我将一组9个布尔值转换为一个int,我将其用于tilemap sprite数组以快速找到图块。只是好奇,有没有简单的方法可以扭转这种情况?

也就是说,如果所有布尔值都为真,则下面的结果将为511。是否有一种简单的方法可以将其转换回以将布尔值全部指定为真?或另一个示例,a为假,其余为真,结果将为510。如何将其转换回a = true而其余为假?

int GetBitmask(bool a, bool b, bool c, bool d, bool e, bool f, bool g, bool h, bool i)
{
    int r = (a ? 1 << 0 : 0) | (b ? 1 << 1 : 0) | (c ? 1 << 2 : 0) |
            (d ? 1 << 3 : 0) | (e ? 1 << 4 : 0) | (f ? 1 << 5 : 0) |
            (g ? 1 << 6 : 0) | (h ? 1 << 7 : 0) | (i ? 1 << 8 : 0);
    return r;
}
斯科特·梅默斯坦

您想使用逻辑AND(&)掩盖您的答案,并反向进行操作r

a = (r & (1 << 0)) != 0;
b = (r & (1 << 1)) != 0;
c = (r & (1 << 2)) != 0;
d = (r & (1 << 3)) != 0;
e = (r & (1 << 4)) != 0;
f = (r & (1 << 5)) != 0;
g = (r & (1 << 6)) != 0;
h = (r & (1 << 7)) != 0;
i = (r & (1 << 8)) != 0;

这是做什么的:

假设r = 14(即b,c和d为真)。然后的位r

00000000 00000000 00000000 00001110

对于a,1 << 0 = 1,因此取这些位与

00000000 00000000 00000000 00000001

a的结果为0,因此布尔值应为false。

对于b,1 << 1 = 2,所以取和的位r

00000000 00000000 00000000 00000010

您会看到有一个共同点,所以与运算的结果是2,所以这是事实。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

将位掩码转换回9个布尔值

来自分类Dev

位操作;将16位值转换为16个布尔值的数组?C语言

来自分类Dev

将4位整数转换为布尔值列表

来自分类Dev

使用位掩码确定是否设置了 2 个或更多布尔值

来自分类Dev

将位位置转换为掩码值

来自分类Dev

将Typescript转换为布尔值

来自分类Dev

将布尔值转换为整数

来自分类Dev

将布尔值转换为char

来自分类Dev

将一个字节转换为8个布尔值

来自分类Dev

在C语言中,如何将几个布尔值转换为int,其位值是差值测试的结果

来自分类Dev

熊猫-将2个字符串列转换为布尔值并合并

来自分类Dev

将8布尔值转换为一个字节的最佳方法?

来自分类Dev

将xs:boolean值转换为Java布尔值

来自分类Dev

必须有9个布尔值的组合

来自分类Dev

奇怪的布尔值转换(?)

来自分类常见问题

将真实或虚假转换为显式布尔值

来自分类Dev

将打字稿转换为布尔值

来自分类Dev

iOS将布尔值转换为字符串

来自分类Dev

将System.Object强制转换为布尔值

来自分类Dev

将布尔值索引转换为运行的开始/结束对

来自分类Dev

无法将数字类型转换为布尔值

来自分类Dev

将布尔值转换为会话变量

来自分类Dev

Boost可选将隐式转换为布尔值?

来自分类Dev

无法将类型“ T”转换为布尔值

来自分类Dev

通过角度指令将布尔值转换为是/否

来自分类Dev

PyYAML自动将某些键转换为布尔值

来自分类Dev

将所有对象字段转换为布尔值

来自分类Dev

将布尔值转换为数据框熊猫

来自分类Dev

将布尔值的多步总和转换为单个公式