写真は我が家の猫、ツナです。最近風邪を引きましたが、どうにか熱も下がってきました(´ω`)
2回目の文字列に続き、今回からは数値関係をさらっと学びます。
以下は全て、mrubyに含まれる対話型のRubyシェルmirbから直接試す事ができます。
$ mirb
mirb Embeddable Interactive Ruby Shell
>
数値
四則演算
四則演算は期待通りの動作。だいたいRubyと同じみたいです。
1 + 2 #=> 3
2 - 1 #=> 1
1 - 3 #=> -2
1.0 + 2.1 #=> 3.10
1 + 2.1 #=> 3.10
4 / 2 #=> 2.0
2 / 3 #=>0.66666666666666
2 % 3 #=> 2
ひとつRubyと違う点は整数同士の割り切れる割り算であっても、返り値はFloatです。
Ruby 2.1.1
irb4 / 2 #=> 2
mruby
mirb4 / 2 #=> 2.0
整数の結果が得たい場合は
div
を使用します。
mirb4.div 2 #=> 2 4.div 3 #=> 1
数値を割った商と余りを配列にして返す
10.divmod 3 #=> [3, 1]
mrubyもRubyと同様、配列の戻り値に対してパターンマッチが使えるので、次のように受け取るとa, b
に商と余りがそれぞれ入ります。
a,b = 10.divmod 3
a #=> 3
b #=> 1
数値から文字列への変換
3.to_s #=> "3"
文字列から数値への変換
Integerへの変換
"3".to_i #=> 3
Floatへの変換
"3".to_f #=> 3.0
絶対値の取得
絶対値
-3.abs #=> 3
絶対値の2乗を返す
abs2
はmrubyでは実装されていないようです。
切り上げ、切り捨て等
自身と等しいか、より大きな整数のうち最小の整数を取得
3.2.ceil #=> 4
3.0.ceil #=> 3
-3.2.ceil #=> -3
自身と等しいかより小さな整数のうち最大の整数を取得
3.2.floor #=> 3
3.0.floor #=> 3
-3.2.floor #=> -4
自身と最も近い整数を取得
3.2.round #=> 3
3.7.round #=> 4
3.5.round #=> 4
0.5は1に、-0.5は-1にまるめられる。
0.5.round #=> 1
-0.5.round #=> -1
0から自身までの整数で、自身に一番近い整数を取得
3.2.truncate #=> 3
3.7.truncate #=> 3
-3.2.truncate #=> -3
ゼロかどうかを判定する
a = 0
a.zero?
(mirb):32: undefined method 'zero?' for 0 (NoMethodError)
おや、zero?
はないみたいです。まあa == 0
で事足りますけどね。
16進数
16進数を表現する場合は数値の前に0x
をつけます。
0x10 #=> 16
0xff #=> 255
2進数
2進数を表現する場合は数値の前に0b
をつけます。
0b11111111 #=> 255
0b01111111 #=> 127
8進数
8進数を表現する場合は数値の前に0o
をつけます。
0o10 #=> 8
0o11 #=> 9
ビット演算
Webアプリで使う事は殆どないだろうけど組込みでは使いそうなイメージのあるビット演算。
左方向ビットシフト
a = 1 # 0001
a << 1 #=> 2 0010
a << 2 #=> 4 0100
a << 3 #=> 8 1000
右方向ビットシフト
a = 8 # 1000
a >> 1 #=> 4 0100
a >> 2 #=> 2 0010
a >> 3 #=> 1 0001
a >> 4 #=> 0 0000
ビットのandをとる
0b0011 & 0b0010 #=> 2 0010
ビットのorをとる
0b0011 | 0b1010 #=> 11 1011
きりがないので、これくらいで... Rubyのリファレンスマニュアルに書いてある事は大部分がそのまま使えるようです。ただし一部zero?
がない、/
で割り算した結果の型がRubyとは異なるなどの違いが有るようです。
以前ここに書いていたバイナリデータフォマットの実装は別の回に移動しました。
ツナでもわかるmruby [4回目:バイナリデータフォーマットの実装]