如何在C中设置uint8_t的3个低位

时间:2015-06-23 16:08:12

标签: c bitwise-operators

我想设置uint8_t的3个低位,值为3。 我尝试过以下方法:

uint8_t temp = some_value;
temp = temp & 0x3

但这不起作用....

4 个答案:

答案 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