C 如何读取无符号整数的特定位

C 如何读取无符号整数的特定位,c,bit,unsigned,uint8t,C,Bit,Unsigned,Uint8t,我有一个uint8,需要读/写特定的位。我该怎么做呢。具体地说,我的意思是,我需要先写一个值的前7位,然后再读另一个值的最后一位 编辑:忘记指定了,我将这些设置为big-endian,您正在寻找位掩码。学习如何使用C的位运算符:~、|、&、^等等都会有很大的帮助,我建议您查找它们 否则--要读取最低有效位吗 uint8_t i = 0x03; uint8_t j = i & 1; // j is now 1, since i is odd (LSB set) 设定好了吗 uint8_

我有一个uint8,需要读/写特定的位。我该怎么做呢。具体地说,我的意思是,我需要先写一个值的前7位,然后再读另一个值的最后一位

编辑:忘记指定了,我将这些设置为big-endian,您正在寻找位掩码。学习如何使用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 |= (1 << N); // or-equals; no effect if bit is already set
要将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 & ~(1);
要读取i的第n位(从零开始索引,其中0是LSB)吗

i & (1 << N);

i&(1什么是第一位和最后一位取决于您的体系结构。通常人们会因为这个原因谈论最低和最高有效位。要设置LSB,您需要:
i |=j&1;
,而不是
i&=j&1
(或
i=i&(j&1)