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

ast*_*nic 13 c bit-manipulation

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

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

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

#include <stdio.h>
#include <stdint.h>
int main(){
  int byte_1 = 0b00001111;
  int byte_2 = 0b01010101;

  byte_2 = // what's next ?

  return 0;
}
Run Code Online (Sandbox Code Playgroud)

eme*_*esx 23

byte_2 = (byte_2 & 0b01111111) | (byte_1 & 0b10000000);
Run Code Online (Sandbox Code Playgroud)


Sha*_*baz 6

您需要首先读取该位byte1,清除该位byte2or您之前读取的位:

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;
Run Code Online (Sandbox Code Playgroud)

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