<STEP1>
シフト演算のイメージ
まずは、10進数でイメージします。
左シフト演算というのは、左に桁を動かすことを言います。
「<<」 という演算子を使います。
23 << 1 = 230
36 << 2 = 3600
のようなイメージです。10進数なので、1桁動かすと10倍、2桁動かすと10^2倍(100倍)になります。
右シフト演算というのは、右に桁を動かすことをいいます。
「>>」演算子を使います。
2345 >> 1 = 234
4567 >> 2 = 45
のようなイメージです。左シフト演算と違って、誤差が出るのがわかりますか?
これを、2進数でやりますので、
00011011 << 2 = 01101100
00010101 << 3 = 10101000
1桁動かすと2倍、2桁動かすと2^2倍(4倍)、3桁動かすと、2^3倍(8倍)になります。
同様に、
10101111 >> 3 = 00010101
となり、末尾の111が捨てられます。
【演習】
①0x7B >> 2 算術の10進と論理の16進
②0xC8 | 0x49
③0xA3 ^ 0x81
④0xD6 & 0xBA
⑤0x9C << 3
⑥0x47 >> 2
⑦0xB8 << 2
⑧0xB8 >> 3
②0xC8 | 0x49
③0xA3 ^ 0x81
④0xD6 & 0xBA
⑤0x9C << 3
⑥0x47 >> 2
⑦0xB8 << 2
⑧0xB8 >> 3
①0x7B >> 2
01111011
00011110
A.0x1E,30
②0xC8 | 0x49
11001000
01001001
11001001
A.0xC9
11001000
01001001
11001001
A.0xC9
③0xA3 ^ 0x81
10100011
01000001
11100010
A.0xE2
10100011
01000001
11100010
A.0xE2
④0xD6 & 0xBA
11010110
10111010
10010010
A.0x92
11010110
10111010
10010010
A.0x92
⑤0x9C << 3
10011100
11100000(算・論理)
00011111
00100000
A.0xE0,-32
10011100
11100000(算・論理)
00011111
00100000
A.0xE0,-32
⑥0x47 >> 2
01000111
00010001
A.0x11,17
01000111
00010001
A.0x11,17
⑦0xB8 << 2
10111000
11100000
A.0xE0, -32
10111000
11100000
A.0xE0, -32
⑧0xB8 >> 3
10111000
11110111
00001000
00001001
10111000
11110111
00001000
00001001
00010111
A.0x17,-9
A.0x17,-9