将位掩码分配给整数值的最简单方法是什么? 例如,我想要整数,第一,第三和第四位= 1,其他= 0。
当然我在寻找代码,而不是单一价值!当然有很多可能性,但我试图找到最简单,最具描述性的外观
答案 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;
直到你到达你想要的地方。