我想创建一个掩码,为第一个nnybles设置位,
以及这些nybles的第一个m位,其中n <=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) )

最佳答案

你可以用

(0x0f0f0f0f ^ (0xf0f0f0f0 >> m)) >> (4*n)

10-08 02:08