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

时间:2012-06-25 17:00:02

标签: 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;
}

2 个答案:

答案 0 :(得分:23)

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

答案 1 :(得分:6)

您需要先从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具有相同值的情况。