このコードが何をしているのかまったくわかりません。誰か説明してもらえますか?
long input; //just here to show the type, assume it has a value stored
unsigned int output( input >> 4 & 0x0F );
ありがとう
このコードが何をしているのかまったくわかりません。誰か説明してもらえますか?
long input; //just here to show the type, assume it has a value stored
unsigned int output( input >> 4 & 0x0F );
ありがとう
入力を 4 ビット右にビットシフトし、下位 4 ビットでマスクします。
この 16 ビット数の例を見てみましょう: (ドットは視覚的な分離のためだけのものです)
1001.1111.1101.1001 >> 4 = 0000.1001.1111.1101
0000.1001.1111.1101 & 0x0F = 1101 (or 0000.0000.0000.1101 to be more explicit)
& はビットごとの AND 演算子です。「& 0x0F」は、最初の 4 ビットを 0 で埋めたり、値の最初 (左端) の 4 ビットを無視したりするために実行されることがあります。
0x0f = 00001111. したがって、0x0f を他のビット パターンでビットごとに & 操作すると、右端の 4 ビットのみが保持され、左の 4 ビットがクリアされます。
入力の値が 01010001 の場合、&0x0F を実行すると、00000001 が得られます。これは、左の 4 ビットをクリアした後に得られるパターンです。
別の例として、これは私がプロジェクトで使用したコードです。
バイト verflag = (バイト)(bIsAck & 0x0f) | ((バージョン << 4) & 0xf0)。ここでは、パケット ヘッダー構造で使用されているため、スペースを節約するために 2 つの値を 1 つの Byte 値に結合しています。bIsAck は BOOL で、version は値が非常に小さい Byte です。したがって、これらの値は両方とも 1 つの Byte 変数に含めることができます。
結果の変数の最初のニブルにはバージョンの値が含まれ、2 番目のニブルには bIsAck の値が含まれます。バージョンの値を取得しながら4ビット>>を実行することにより、受信時に値を個別の変数に取得できます。
これがあなたが求めたものに近いことを願っています。
これは、"input" の内容をビットごとに右シフトし、結果と 0x0F (1101) のビットごとの AND を実行することです。
それが何をするかは、「入力」の内容とタイプによって異なります。それはintですか?平行?文字列 (これは、最初のバイトへのポインターに対してシフトとビットごとの AND が行われていることを意味します)。
内部で何が起こっているかの詳細については、「c++ ビット単位の操作」を Google で検索してください。さらに、C/C++ の優先順位は他の多くの言語とまったく同じではないため、C++ 演算子の優先順位を確認してください。