2012-06-25 36 views
13

ビットの設定方法、ビットのクリア方法、ビットのトグル方法、ビットの設定方法を知っています。Cビット操作/ 1バイトから別のバイトへのコピー

しかし、どのようにして、bit_1のnr 7をbyte_2のnr 7にコピーできますか?

if文なしで(ビットの値をチェックせずに)可能ですか?

あなたが最初 byte1からビットを読み取る必要がある、あなたが以前に読ん byte2orにビットをビットをクリア
#include <stdio.h> 
#include <stdint.h> 
int main(){ 
    int byte_1 = 0b00001111; 
    int byte_2 = 0b01010101; 

    byte_2 = // what's next ? 

    return 0; 
} 
+0

あなたは一度の操作でそれを行う方法をお探しですか?そうでない場合は、あなたがすでにやっていることをやっていることをやってください:byte1のビットをチェックし、byte2のビットをチェックし、同じでない場合はbyte2のビットをセットします。 –

+0

それは1回の操作ではいけませんが、可能であればビット値の前のチェックを避けたい – astropanic

+0

[条件なしで別のunsigned charの別のビットとunsigned charのビットを設定する](http: //stackoverflow.com/questions/11170740/setting-a-bit-of-an-unsigned-char-with-the-other-bit-of-another-unsigned-char) – Heisenbug

答えて

23
byte_2 = (byte_2 & 0b01111111) | (byte_1 & 0b10000000); 
+5

更新しました。 –

+1

geezzz ...これに投票するのは#30秒ごとに点滅しています... – Mysticial

+0

@EitanTはいそれは0 – emesx

6

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が同じ値である場合です。

+0

読み取りビットが0の場合、これはすでにそのビット位置に1を持っているバイトには書き込まれません。 –

+0

@ CoreyOgburn、右。私は答えを – Shahbaz

関連する問題