教科書から:
したがって、バイトには8ビットがあり、右ビットシフトは左に0ビットを追加し、右からビットをポップオフします。しかし、上記の例を使用してバイトを出力するにはどうすればよいでしょうか? 私は期待していたでしょう:
putchar(b >> 8)
putchar(b >> 7)
putchar(b >> 6)
etc.
putchar がポップされたオフビットを出力すると仮定するので?
putchar は、指定された整数に対応する ASCII 文字を出力します。
putchar(0x41)
整数 0x41 をunsigned char
(サイズが 1 バイトの) に変換し、0x41 に対応する ASCII 文字 (「A」) を出力します。
ここで重要なことは、putchar が下位 8 ビットのみを参照すること、つまり、同じことputchar(0x41)
を行うことです。putchar(0xffffff41)
上記の関数に何かを渡すとどうなるか見てみましょう。
outbyte(0x41424344);
最初に b を 24 ビットだけビットシフトし、次にその値に対して putchar を呼び出します。
0x41424344 << 24; //0x00000041
putchar(0x00000041); //A
次に、b を 16 ビットだけビットシフトし、その値に対して putchar を呼び出します。
0x41424344 << 24; //0x00004142
putchar(0x00004142); //B
等
これが実際の動作です: http://ideone.com/3xeFSx