我有一个带有少量设置位的掩码,只有 3 或 4 个。 掩码最多可以是 64 位,但让我们举一个简短的例子 -
10100101
我想生成停止在设置位但包括较低位直到前一个停止位的掩码:
00000001
00000110
00111000
11000000
我可以通过隔离最低位并将这些位添加到其右侧来循环执行此操作
((x & -x) << 1) - 1
然后使用 xor 删除之前的掩码。
问题是它可以更有效地并行完成而不用一些 swar 或 simd 循环吗?
服用和使用:
1 #include <stdio.h>
2 #include <stdint.h>
3 void main() {
4 int32_t val = 0xa5; // input value
5 int32_t sum = 0, mask;
6 while(val != 0) {
7 mask = (val - 1) ^ val;
8 printf("Mask-out is: %x\n", mask ^ sum);
9 sum = mask;
10 val &= ~mask;
11 }
12 }