ビットシフト

明解C言語 入門編 > 7. 基本型 >

ビットシフト

Python
import sys

def count_bits(x):
    count = 0
    while (x != 0):
        if (x & 1 != 0):
            count +=1
        x = (x >> 1) & ~(~0 << (sys.getsizeof(x) * 8));
    return count

def int_bits():
    return count_bits(~0)

def print_bits(x):
    for i in range(int_bits() - 1, -1,  -1):
        if ((x >> i) & 1) != 0:
            sys.stdout.write("1")
        else:
            sys.stdout.write("0")
    print

na = 12345

sys.stdout.write("A       = ");  print_bits(na)
sys.stdout.write("A >> 1  = ");  print_bits(na >> 1)
sys.stdout.write("A >> 2  = ");  print_bits(na >> 2)
sys.stdout.write("A >> 3  = ");  print_bits(na >> 3)
sys.stdout.write("A >> 4  = ");  print_bits(na >> 4)
print

sys.stdout.write("A       = ");  print_bits(na)
sys.stdout.write("A << 1  = ");  print_bits(na << 1)
sys.stdout.write("A << 2  = ");  print_bits(na << 2)
sys.stdout.write("A << 3  = ");  print_bits(na << 3)
sys.stdout.write("A << 4  = ");  print_bits(na << 4)

実行結果

N:\>python lesson_07_057.py
A = 0000000000000000000000000000000000000000000000000000000000000000000000000000000000011000000111001
A >> 1 = 0000000000000000000000000000000000000000000000000000000000000000000000000000000000001100000011100
A >> 2 = 0000000000000000000000000000000000000000000000000000000000000000000000000000000000000110000001110
A >> 3 = 0000000000000000000000000000000000000000000000000000000000000000000000000000000000000011000000111
A >> 4 = 0000000000000000000000000000000000000000000000000000000000000000000000000000000000000001100000011

A = 0000000000000000000000000000000000000000000000000000000000000000000000000000000000011000000111001
A << 1 = 0000000000000000000000000000000000000000000000000000000000000000000000000000000000110000001110010
A << 2 = 0000000000000000000000000000000000000000000000000000000000000000000000000000000001100000011100100
A << 3 = 0000000000000000000000000000000000000000000000000000000000000000000000000000000011000000111001000
A << 4 = 0000000000000000000000000000000000000000000000000000000000000000000000000000000110000001110010000