ビットシフト
明解C言語 入門編 > 7. 基本型 >
ビットシフト
Ruby
def count_bits(x) count = 0 while (x != 0) count += 1 if (x & 1 != 0) x = (x >> 1) & ~(~0 << (x.size * 8)) end return count end def int_bits return count_bits(~0) end def print_bits(x) (int_bits - 1).downto(0) do |i| print(((x >> i) & 1) != 0 ? '1' : '0') end puts "" end na = 12345 print "A = "; print_bits(na) print "A >> 1 = "; print_bits(na >> 1) print "A >> 2 = "; print_bits(na >> 2) print "A >> 3 = "; print_bits(na >> 3) print "A >> 4 = "; print_bits(na >> 4) puts "" print "A = "; print_bits(na) print "A << 1 = "; print_bits(na << 1) print "A << 2 = "; print_bits(na << 2) print "A << 3 = "; print_bits(na << 3) print "A << 4 = "; print_bits(na << 4)
実行結果
L:\>ruby l:\lesson_07_057.rb
A = 000000000000000000011000000111001
A >> 1 = 000000000000000000001100000011100
A >> 2 = 000000000000000000000110000001110
A >> 3 = 000000000000000000000011000000111
A >> 4 = 000000000000000000000001100000011A = 000000000000000000011000000111001
A << 1 = 000000000000000000110000001110010
A << 2 = 000000000000000001100000011100100
A << 3 = 000000000000000011000000111001000
A << 4 = 000000000000000110000001110010000