LoginSignup
4
3

More than 5 years have passed since last update.

ツナでもわかるmruby [3回目:数値]

Last updated at Posted at 2014-05-04

ツナ_ウイスキー.jpg

写真は我が家の猫、ツナです。最近風邪を引きましたが、どうにか熱も下がってきました(´ω`)

2回目の文字列に続き、今回からは数値関係をさらっと学びます。
以下は全て、mrubyに含まれる対話型のRubyシェルmirbから直接試す事ができます。

$ mirb
mirb  Embeddable Interactive Ruby Shell

>

数値

四則演算

四則演算は期待通りの動作。だいたいRubyと同じみたいです。

mirb
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

irb
4 / 2 #=> 2

mruby

mirb
4 / 2 #=> 2.0

整数の結果が得たい場合はdivを使用します。

mirb
4.div 2 #=> 2
4.div 3 #=> 1

数値を割った商と余りを配列にして返す

mirb
10.divmod 3 #=> [3, 1]

mrubyもRubyと同様、配列の戻り値に対してパターンマッチが使えるので、次のように受け取るとa, bに商と余りがそれぞれ入ります。

mirb
a,b = 10.divmod 3

a #=> 3
b #=> 1

数値から文字列への変換

mirb
3.to_s #=> "3"

文字列から数値への変換

Integerへの変換

mirb
"3".to_i #=> 3

Floatへの変換

mirb
"3".to_f #=> 3.0

絶対値の取得

絶対値

mirb
-3.abs #=> 3

絶対値の2乗を返すabs2はmrubyでは実装されていないようです。

切り上げ、切り捨て等

自身と等しいか、より大きな整数のうち最小の整数を取得

mirb
3.2.ceil  #=>  4
3.0.ceil  #=>  3
-3.2.ceil #=> -3

自身と等しいかより小さな整数のうち最大の整数を取得

mirb
3.2.floor  #=>  3
3.0.floor  #=>  3
-3.2.floor #=> -4

自身と最も近い整数を取得

mirb
3.2.round #=> 3
3.7.round #=> 4
3.5.round #=> 4

0.5は1に、-0.5は-1にまるめられる。

mirb
0.5.round  #=>  1
-0.5.round #=> -1

0から自身までの整数で、自身に一番近い整数を取得

mirb
3.2.truncate  #=>  3
3.7.truncate  #=>  3
-3.2.truncate #=> -3

ゼロかどうかを判定する

mirb
a = 0
a.zero?
(mirb):32: undefined method 'zero?' for 0 (NoMethodError)

おや、zero?はないみたいです。まあa == 0で事足りますけどね。

16進数

16進数を表現する場合は数値の前に0xをつけます。

mirb
0x10 #=> 16
0xff #=> 255

2進数

2進数を表現する場合は数値の前に0bをつけます。

mirb
0b11111111 #=> 255
0b01111111 #=> 127

8進数

8進数を表現する場合は数値の前に0oをつけます。

mirb
0o10 #=> 8
0o11 #=> 9

ビット演算

Webアプリで使う事は殆どないだろうけど組込みでは使いそうなイメージのあるビット演算。

左方向ビットシフト

mirb
a = 1  #        0001
a << 1 #=> 2    0010
a << 2 #=> 4    0100
a << 3 #=> 8    1000

右方向ビットシフト

mirb
a = 8  #        1000
a >> 1 #=> 4    0100
a >> 2 #=> 2    0010
a >> 3 #=> 1    0001
a >> 4 #=> 0    0000

ビットのandをとる

mirb
0b0011 & 0b0010 #=> 2    0010

ビットのorをとる

mirb
0b0011 | 0b1010 #=> 11   1011

きりがないので、これくらいで... Rubyのリファレンスマニュアルに書いてある事は大部分がそのまま使えるようです。ただし一部zero?がない、/で割り算した結果の型がRubyとは異なるなどの違いが有るようです。

以前ここに書いていたバイナリデータフォマットの実装は別の回に移動しました。
ツナでもわかるmruby [4回目:バイナリデータフォーマットの実装]

4
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
3