基礎から真面目にRuby-数値編-
amazon:初めてのRuby3章を読みます。
数値に対する演算もだいたいがメソッドのシンタックスシュガーって点以外は、言語ごとの違いとして覚えるだけな内容が多い。
むしろ、多倍長とか型の自動変換とか、大抵のことはよしなにやってくれるので覚えることもあまりない。
ビットアクセス
Fixnum|Bignum#[]
がちょっとびっくり。数値に[]が付けられるなんてね。なんという多態性。(多態性って言いたいだけ)
self[nth] -> Fixnum
nth 番目のビット(最下位ビット(LSB)が 0 番目)が立っている時 1 を、そうでなければ 0 を返します。
つまりこういうことですね。
def accessBits(num) str = "" length = ("%b".%num).length #2進数にした時の長さ length.downto(0) do |i| str << num[i].to_s str << ", " unless i == 0 end return str end p accessBits(31) # 出力 "0, 1, 1, 1, 1, 1"
この適当なlengthの演算はnumがマイナスだとダメみたいよ!"%b".%(-31)に"..100001"が返ってくるからね。
divmodちゃん可愛い
多重代入とあわせて
a, b = 100.divmod(7) puts "商:#{a}, あまり:#{b}" a, b = (100.5).divmod(7) puts "商:#{a}, あまり:#{b}" # 出力 商:14, あまり:2 商:14, あまり:2.5
かわいい。