Ruby でビット演算をしてみる。

ビットAND

a = 10
b = 11

puts "#{a} & #{b} => #{a&b}"
puts a.to_s(2)
puts b.to_s(2)
puts "----"
puts (a&b).to_s(2)

出力結果

10 & 11 => 10
1010
1011
----
1010

ビットOR

a = 10
b = 11

puts "#{a} | #{b} => #{a|b}"
puts a.to_s(2)
puts b.to_s(2)
puts "----"
puts (a|b).to_s(2)

出力結果

10 | 11 => 11
1010
1011
----
1011

ビットXOR

a = 10
b = 11

puts "#{a} ^ #{b} => #{a^b}"
puts a.to_s(2)
puts b.to_s(2)
puts "----"
printf("%04b\n", (a^b))

出力結果

10 ^ 11 => 1
1010
1011
----
0001

ビット反転

a = 10

puts "~#{a} => #{~a}"
printf("%08b\n", a)
puts "--------"
printf("%08b\n", ~a)

出力結果

~10 => -11
00001010
--------
..110101

左シフト

a = 11
b = 1

puts "#{a} << #{b} => #{a << b}"
printf("%08b\n", a)
puts "--------"
printf("%08b\n", a<<b)

出力結果

11 << 1 => 22
00001011
--------
00010110

右シフト

a = 11
b = 1

puts "#{a} >> #{b} => #{a >> b}"
printf("%08b\n", a)
puts "--------"
printf("%08b\n", a>>b)

出力結果

11 >> 1 => 5
00001011
--------
00000101

参考