C位操作/从一个字节到另一个字节复制一位

我知道如何设置一个位,清除一点,切换一下,并检查是否设置了一个位。

但是,我如何将bit,例如byte_1的nr 7复制到byte_2中的bit nr 7?

没有if语句(没有检查位的值)是可能的吗?

#include  #include  int main(){ int byte_1 = 0b00001111; int byte_2 = 0b01010101; byte_2 = // what's next ? return 0; } 

 byte_2 = (byte_2 & 0b01111111) | (byte_1 & 0b10000000); 

您需要先从byte1读取该位,清除byte2上的位和/ or您之前读取的位:

 read_from = 3; // read bit 3 write_to = 5; // write to bit 5 the_bit = ((byte1 >> read_from) & 1) << write_to; byte2 &= ~(1 << write_to); byte2 |= the_bit; 

请注意,另一个答案中的公式(如果将其扩展为使用变量,而不仅仅是第7位)是针对read_fromwrite_to是相同值的情况。