创建 32 位位掩码的最有效方法

Jac*_*cko 0 c bit-manipulation bitwise-operators

我想创建一个掩码来设置第一个nnybbles的位,以及m这些 nybbles的第一个位, wheren <=8m <=4 .

高效,我的意思是一种最小化按位运算的方法。

目前我使用蛮力方法:首先创建一个 nybble 掩码,然后继续左移掩码并将这些数字组合在一起。

这是我目前的方法:

#define NIBBLE   ((unsigned int)0xF >> m))
#define MASK     ((NIBBLE | (NIBBLE << 4) |  (NIBBLE << (8)) | (NIBBLE << (12)) | (NIBBLE << (16)) | (NIBBLE << (20)) | (NIBBLE << (24)) | (NIBBLE << (28)))  >> (n*4) )
Run Code Online (Sandbox Code Playgroud)

Fal*_*ner 5

您可以使用

(0x0f0f0f0f ^ (0xf0f0f0f0 >> m)) >> (4*n)
Run Code Online (Sandbox Code Playgroud)