我正在寻找一个位操作函数,它可以接受两个位字符串作为输入,并根据第二个字符串对第一个字符串进行过滤和压缩,只保留第二个字符串中值为1的位。例如:
以下是我正在寻找的各种解决方案的一些示例:位操作技巧
01101010 and 11110000 gives 00000110
01101010 and 00001111 gives 00001010
01101010 and 10101000 gives 00000011
通过使用循环、条件语句和独立处理每个位,这很容易实现,但如果存在一种更快的比特操作技巧的话,我正在寻找这种方法,而不是使用条件语句和循环。它不必处理超过 32 位的输入。因此,解决方案的签名将如下:uint32_t filter(uint32_t in, uint32_t mask)
在 C 中,它看起来类似于使用数组和循环的以下内容:
void filter(bool in[], bool mask[], bool out[], int size) {
int output_index = 0;
for (int input_index = 0; input_index < size; ++input_index) {
if (mask[input_index]) {
out[output_index++] = in[input_index];
}
}
}
以下是我正在寻找的各种解决方案的一些示例:位操作技巧
01101010和11110000的结果是00000110
吗?你是通过什么推断出来的? - alinsoaroutput_index
减少而不是增加。 - alinsoar