我有一个掩码,有少量的设置位,只有3或4位。掩码可以高达64位,但让我们举一个简短的例子-10100101我想生成的掩码在设置位停止,但包括较低的位,直到前一个停止位:
10100101
00000001 00000110 00111000 11000000
我可以在一个循环中做到这一点,方法是隔离最低位,并将这些位添加到其右侧((x & -x) << 1) - 1,然后使用异或删除前一个掩码。问题是,在不使用swar或simd循环的情况下,是否可以更高效地并行执行?
((x & -x) << 1) - 1
ktecyv1j1#
服用和用途:
#include <stdio.h> #include <stdint.h> void main() { int32_t val = 0xa5; // input value int32_t sum = 0, mask; while(val != 0) { mask = (val - 1) ^ val; printf("Mask-out is: %x\n", mask ^ sum); sum = mask; val &= ~mask; } }
1条答案
按热度按时间ktecyv1j1#
服用和用途: