14

我知道如何设置位、清除位、切换位以及检查是否设置了位。

但是,我如何将位,例如 byte_1 的 nr 7 复制到 byte_2 的位 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;
}
4

2 回答 2

25
byte_2 = (byte_2 & 0b01111111) | (byte_1 & 0b10000000);
于 2012-06-25T17:06:21.290 回答
7

您需要先从 读取该位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;

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

于 2012-06-25T17:04:28.950 回答