【WIP】珠玉のプログラミング

私のこの本を心の中でたまたまのプログラミングと読んでいる。かわいい ここでは演習問題について自分の理解を書き連ねていく、逐次アップデート予定

コラム1 問題2

bit列のsetについて

rubyで書くとこんな感じなると思われる

a =  0 #初期化
b = a | 1 << 2 # 3番目のフラグをonにする1 << 2 = 4(100)
c = b | 1 << 3 # 4番目のフラグをonにする 1 << 3 = 8(1000)
d = c | 1 << 4 # 5番目のフラグをonにする 1 << 4 = 16(10000)
e = d | 1 << 5 # 6番目のフラグをonにする 1 << 5 = 32(100000)
puts e.to_s(2) # => 111100

# 各配列要素は添字でのアクセスで見れる
puts e[5] # 1 6番目はonにしたので1になってる

# bit列aのi番目をonにする。
def set(a, i) 
  a | 1 << i - 1
end

puts set(a, 7).to_s(2) # =>  1000000
puts set(a, 64).size # => 8 defaultだとIntegerは8bytes
puts set(a, 10000000).size # => 1.25mb シフトしたら勝手に拡張されるっぽい

これでソートしたら速度って変わるんけ?