我有以下代码,该代码为我将一组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] 删除。
我来说两句