2

我有一个 uint8_t,我需要读/写特定位。我将如何去做这件事。具体来说,我的意思是我需要先写入,然后再读取一个值的前 7 位,然后读取另一个值的最后一位。

编辑:忘记指定,我将这些设置为大端

4

1 回答 1

5

您正在寻找位掩码。学习如何使用 C 的按位运算符:~|&^会有很大帮助,我建议您查阅它们。

否则——想要读取最低有效位?

uint8_t i = 0x03;

uint8_t j = i & 1; // j is now 1, since i is odd (LSB set)

并设置它?

uint8_t i = 0x02;
uint8_t j = 0x01;

i |= (j & 1); // get LSB only of j; i is now 0x03

想将 i 的七个最高有效位设置为 j 的七个最高有效位?

uint8_t j = 24; // or whatever value
uint8_t i = j & ~(1); // in other words, the inverse of 1, or all bits but 1 set

想读出 i 的这些位吗?

i & ~(1);

想要读取 i 的第 N 位(从零开始索引,其中 0 是 LSB)位?

i & (1 << N);

并设置它?

i |= (1 << N); // or-equals; no effect if bit is already set

当你学习 C 时,这些技巧会派上用场。

于 2013-10-28T03:28:52.247 回答