将整数值设置为位掩码

时间:2010-05-21 13:07:37

标签: c

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

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

6 个答案:

答案 0 :(得分:9)

我认为思考(!)的最佳方法是仅从0开始索引位,然后应用“设置第n位,按位与值(1&lt;&lt; n)”:< / p>

int first_third_and_fourth = (1 << 0) | (1 << 2) | (1 << 3);

答案 1 :(得分:7)

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

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

int mask = b3|b2|b0;

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

int mask = 0x000d;

答案 2 :(得分:2)

使用OR位运算符(|)组合位:

#define FIRST_BIT (0x1)
#define SECOND_BIT (0x2)
#define THIRD_BIT (0x4)
#define FOURTH_BIT (0x8)
/* Increase by for each bit, *2 each time, 
   0x prefix means they're specified via a hex value */

int x = FIRST_BIT | THIRD_BIT | FOURTH_BIT;

您可以使用AND位运算符(&)检查是否设置了位:

int isset = x&FIRST_BIT;

答案 3 :(得分:1)

这应该这样做:

int x = 0x0D;

如果你足够幸运地使用gcc并且不需要携带:

int x = 0b1101;

答案 4 :(得分:0)

这是一个在线位转换器,如果你不想自己做总结:

http://www.binaryconvert.com/convert_unsigned_int.html

只需填写下面的位(例如1101),然后计算答案(例如0x0000000D)。 任何有能力的计算器应该能够做同样的事情......

答案 5 :(得分:0)

待办事项

int something = 0x00000001 * 2;

直到你到达你想要的地方。