2017-02-01 10 views
0

私はビット操作を達成する必要があります。Cビット操作

私の仕事は、多くの1つのバイト値を繰り返し、各バイトから特定の量のビットを引き出すことです(時には奇数、時には偶数)。これを達成する良い方法はありますか?

ここで説明します。私の目標は、あるバイトから特定のビットを取り出し、別のバイトのビットと組み合わせることです。

たとえば、0xE1の最初の3ビットと0xA1の最後の5ビットを結合します。積分値からビットを抽出

+3

最初の7つのビットをどこにコピーしますか?そして、なぜあなたは "stdio"と言いますか?これは、 'printf'や' scanf'関数のような入力と出力に関係するだけで、ビット操作とは何の関係もありません。おそらく少し詳しく説明できますか?私たちにいくつかの特定の入力を教えて、出力が何であるべきか(そして現在の出力が何であるか)を教えてください。もちろん、あなたが現在持っているものの[最小限の、完全で検証可能な例](http://stackoverflow.com/help/mcve)を作成してみてください。 –

+0

@Kevinそれは間違っています。 – Olaf

+0

@ケビンああ、大丈夫だよ。私はどのように私は1バイトから7ビットと、別のビットから1ビットを組み合わせるかについての任意の並べ替えのアイデアがありますか? 0xAEの最初の5ビットと0XE1の最後の3ビットが必要な場合のように –

答えて

3

はビット単位シフト操作で行うことができます。

unsigned int c = 23; 

c & 0xF // extract the lowest 4 bits, 0xF is binary 1111 
c & 0x7F // extract the lowest 7 bits, 0x7F is binary 1111111 
(c >> 4) & 0x3 // extract 2 bits starting at bit 4 (0 indexed). 
+0

ありがとう!これはいい –