StroustrupによるTCPPPLを読んでいます。を抽出する関数の例を示します中間 次のような32ビット長の16ビット:
unsigned short middle(long a){ return (a>>8)&0xffff;}.
私の質問は:それは抽出されていません最終 16ビット?私が間違っている方法を教えてください。
回答 4 件
a >> 8
a
の値を右シフトします 8ビットずつ。下位8ビットは忘れられ、以前は31〜8の番号が付けられていたビットが23〜0に移動(番号が付け直され)されます。最後に、上位16ビットをマスクすると、ビット15〜0が残ります。ビット15〜0は元々(シフト前)位置23〜8にありました。出来上がり。aは右に8ビットシフトします(
a>>8
)ビット単位および操作の前。>>8
に気づきましたか 部?最初に引数を8ビット右にシフトします。
実際に真ん中の16ビットを抽出します: