gpt4 book ai didi

c# - 将位掩码转换回 9 个 boolean 值

转载 作者:行者123 更新时间:2023-11-30 19:41:06 25 4
gpt4 key购买 nike

我有以下代码,可以将一组 9 个 boolean 值转换为一个 int,我将其用于 tilemap sprite 数组以快速找到图 block 。只是好奇,是否有一种简单的方法可以扭转这种局面?

即如果所有 boolean 值都为真,则下面的结果将为 511。是否有一种简单的方法可以将其转换回所有 boolean 值都为真?或者另一个例子,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;
}

最佳答案

您想使用逻辑与 (&) 来屏蔽您的答案,并反转您制作 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,所以 bool 应该是 false。

对于 b,1 << 1 = 2,所以取 r 的位并将其与

00000000 00000000 00000000 00000010

你看到有 1 个位是共同的,所以它的 AND 运算结果是 2,所以它是真的。

关于c# - 将位掩码转换回 9 个 boolean 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21052588/

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