gpt4 book ai didi

bit-manipulation - 如何使用按位运算符屏蔽整数

转载 作者:行者123 更新时间:2023-12-04 05:47:53 25 4
gpt4 key购买 nike

我想知道是否有办法使用按位运算符屏蔽 int 值列表,并使用该掩码来知道 int 值是否是掩码中的值之一。

即如果我有值 129 和 17,如何计算一个掩码,告诉我一个 int 值是否在掩码中对应(如果 int 值是 129 或 17)。

我希望通过下一个伪代码可以更好地理解我的问题。

* *编辑:
我想只用一个值(掩码)打包、掩码或“压缩”一个 int 数组,然后只接受要掩码的值列表中的值(数组)。


有可能吗?提前致谢。

valuesToMask = [17, 129, ...]
mask = getmask(valuesToMask)
lstValues = [0,1, 10, ..., 17, 18, 19, ..., 129, ...]
foreach(int value, in lstValues) {
if(check(mask,value))
printf("\nValue %d is in the mask", value);
else
printf("\nValue %d is not in the mask", value);
}

提前致谢。我真的很感谢你的帮助和你的时间。

(对不起我的英语不好)

最佳答案

您可以对某些值集执行此操作,但一般情况下不一定如此。例如,如果要确定一个值是 4、5、6 还是 7,则可以执行以下操作:

if ((value & ~3) == 4) ...

这将创建一个掩码,除最低有效两位外,所有位均为 1。 &运算符有效地将最低有效的两位设置为 0。然后比较检查以查看位模式是否与您要查找的值匹配。在二进制表示中,这看起来如下(假设 value 是一个 8 位值):
value        masked
00000011 00000000 = 0
00000100 00000100 = 4
00000101 00000100 = 4
00000110 00000100 = 4
00000111 00000100 = 4
00001000 00001000 = 8

例如,如果您只想检查“4、5 或 7”,则此技术将不起作用。

关于bit-manipulation - 如何使用按位运算符屏蔽整数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10440876/

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