将整数值设置为位掩码

Vla*_*mir 4 c

将位掩码分配给整数值的最简单方法是什么?例如,我想要整数,第一,第三和第四位= 1,其他= 0.

当然我在寻找代码,而不是单一价值!当然有很多可能性,但我试图找到最简单,最具描述性的外观

unw*_*ind 9

我认为最好的思考方式(!)只是从0开始索引位,然后应用"设置第n位,按位与值(1 << n)":

int first_third_and_fourth = (1 << 0) | (1 << 2) | (1 << 3);
Run Code Online (Sandbox Code Playgroud)


pax*_*blo 7

如果您希望代码在位数方面可读,那么这样的东西可能会有用:

#define b0  0x0001
#define b1  0x0002
#define b2  0x0004
#define b3  0x0008
#define b4  0x0010
:
#define b15 0x8000

int mask = b3|b2|b0;
Run Code Online (Sandbox Code Playgroud)

但是,过了一段时间你应该能够告诉哪些十六进制值与哪些位相关,你不需要那样的助记符技巧:

int mask = 0x000d;
Run Code Online (Sandbox Code Playgroud)

  • 但是,为什么选择16位格式呢?我可能会选择宏表示法,以获得更多的语义.像`#define BITMASK(n)(1 <<(n))`的东西可能. (2认同)