我想设置uint8_t的3个低位,值为3。 我尝试过以下方法:
uint8_t temp = some_value;
temp = temp & 0x3
但这不起作用....
答案 0 :(得分:4)
要设置您需要的位|
:
temp = temp | 0x3;
或更紧凑:
temp |= 0x3;
如果要将3位跨度设置为数字3,则需要同时设置和清除位:
temp &= ~0x7; // clear bits
temp |= 0x3; // set bits
答案 1 :(得分:2)
& 3
是合乎逻辑的,除了两个最低位之外,它将清除所有位。你想要或也是。
因此,要将三个最低位设置为三,您将使用temp = (temp & ~7) | 3
。 〜是逻辑not,它将7变为“除最后三个之外的所有其他位”,当与之一起使用时将清除3位。之后还是3进去吧。
答案 2 :(得分:2)
要设置三个低位,需要设置掩码0x07
,因为以二进制表示的7是00000111
。
如果要通过指定位数获得较低位的掩码,可以使用以下公式:
int bits = 3; // 3 lower bits
uint8_t mask = (1 << bits) - 1; // 7
要清除这些位的预先存在的值,请使用掩码的负数和按位运算符&#34;和&#34;:
temp = temp & ~mask; // mask is 00000111
// ~mask is 11111000 (negative)
// this operation zero out the 3 last bits of temp
然后使用按位运算符&#34;或&#34;
为这些位分配新值temp = temp | (new_value & mask); // applying mask to new_value to make
// sure its within the bit limit
答案 3 :(得分:1)
这会将z
的低3位更改为011
(3),同时保留高5位:
uint8_t z = something();
z = (z & ~7) | 3;
在此之后,z
的位将如下所示,其中x
表示&#34;未知&#34;:
xxxxx011