14

私は、ビットを設定する方法、ビットをクリアする方法、ビットを切り替える方法、およびビットが設定されているかどうかを確認する方法を知っています。

しかし、ビット、たとえばbyte_1のnr7をbyte_2のビットnr7にコピーするにはどうすればよいですか?

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 に答える