我对C很陌生,而且似乎弄乱了我的位掩码。据我了解,这是一种从二进制值中获取或创建子集的方法。
说我想获取一个无符号int值的后8位,其中包含00001111000011110000111100001111。
我将如何使用AND / OR来获取最后8个?
答案 0 :(得分:2)
这是一种更通用的解决方案,可以根据您感兴趣的位数生成掩码。
unsigned int last_n_bits(unsigned int value, int n)
{
unsigned int mask = -1;
if (n < sizeof(unsigned) * CHAR_BIT)
mask = ((1<<n)-1);
return value & mask;
}
答案 1 :(得分:0)
您可以使用BINARY AND运算符执行二进制掩码:
unsigned char last_eight_bits = my_number & 0b11111111
答案 2 :(得分:0)
屏蔽所有位> 0xff
:
value & 0xffu
答案 3 :(得分:0)
说我想获取一个无符号int值的后8位,其中包含 00001111000011110000111100001111。
我将如何使用AND / OR来获取最后8个?
在这种情况下,您将使用AND。以下代码将获取8个最低有效位:
unsigned int number = 0x0F0F0F0Fu;
unsigned int mask = 0x000000FFu; // set all bits to "1" which you want to grab
unsigned int result = number & mask; // result will be 0x0000000F
&
运算符用于每个位的AND运算:
00001111000011110000111100001111
AND 00000000000000000000000011111111
------------------------------------
00000000000000000000000000001111
请注意,“ 0 AND X = 0”和“ 1 AND X = X”。您可以在https://en.wikipedia.org/wiki/Boolean_algebra进行进一步调查。