<例題1> unsigned int型変数x に格納されている値3を左に2ビットシフトする。
#include <stdio.h> int main (void) { unsigned int x = 3; printf("x = %3d, 16進数 : %x\n", x, x); x = x << 2; printf("x = %3d, 16進数 : %x\n", x, x); return 0; }
答は、いくつになるだろう。 3 は、下位8ビットが0000 0011だから
<例題2> 45を右に2ビットシフトする。
#include <stdio.h> int main (void) { unsigned int x = 45; printf("x = %3d, 16進数 : %x\n", x, x); x = x >> 2; printf("x = %3d, 16進数 : %x\n", x, x); return 0; }
答は、いくつになるだろう。 45は、下位8ビットが0010 1011だから
<例題3> 16進数abcdを2ビットだけ右に論理シフトした値を求めよ
#include <stdio.h> int main (void) { unsigned int x = 0xabcd; printf("x = %3d, 16進数 : %x\n", x, x); x = x >> 2; printf("x = %3d, 16進数 : %x\n", x, x); return 0; }
答えはいくつになるだろう。0x abcd は、A 10 B 11 C 12 D 13 だから、1010 1011 1100 1101 。
シフトの結果、ビット列はどうなるだろう
<問題> キーボードから入力した正の整数を5倍して表示するプログラムを、シフト演算子を用いて書け
解答例 #include <stdio.h> int main (void) { unsigned int x, y, z; printf("正の整数 : "); scanf("%d", &x); printf(" x = %3d, 16進数 : %x\n", x, x); y = x << 2; z = y + x; printf("5x = %3d, 16進数 : %x\n", z, z); return 0; }