Ruby入門 part2
Ruby入門続けていきます!
目次
1.数値と四則演算
1-1. 数値オブジェクト
前回の記事の説明では、文字列オブジェクトはString
クラスでした。
それに対して数値は複数のクラスに分かれるので、文字列に比べるとちょっとややこしいです💦
大きく分けると整数Fixnum
クラスと浮動小数点数クラスFloat
に分かれます。
浮動小数点数とは、1.23×10-6みたいなやつです。対して、固定小数点数とは0.00000123のようなやつです👨🎓
ちなみに1.23×10-6は、プログラミングとして書くときは1.23e-6という書き方になります。
また、大きい桁数の整数は自動的にBignum
クラスになるそうです。
大きいって何桁?と思いますが、自動的に変わるみたいなので、今は気にしなくて良さそうです🙂
数値オブジェクトを作成するときは、単に数字を書けば良いです👌
文字列みたいにString.new()
やダブルクオーテーション""
などは不要です。
更に、10進数以外の整数も使えます。
記数法 | 書き方 | 例 |
---|---|---|
10進法 | そのまま書く | 123 |
2進法 | 先頭に0bを付ける | 0b1111011 |
8進法 | 先頭に0を付ける | 0173 |
16進法 | 先頭に0xを付ける | 0x7b |
先頭に0ってややこしいですね😭笑
数値の出力は、文字列と同じくprint
メソッドでできます。
また、大きい数値を書く場合は1,234,000
など桁区切りのカンマがあると書きやすいですね。
わたしは桁区切りが無いと気持ち悪い派なので、大きい数字を書くときは必ず書きます。
ただし、Rubyではカンマは別の意味になってしまうので、代わりにアンダーバー_
を使います。
出力結果には桁区切りは表示されないのですが、書き間違いは無くなりそうですね😊
1-2. 四則演算
四則演算の方法は、わりと一般的っぽいので、おそらく特別なものはありません!
沢山の言語を知っているわけではありませんが、excelとか他の言語も同じだと思います😶
足し算は+
、引き算は-
、掛け算は*
、割り算は/
ですね。
割り算の余りを出すのは%
、べき乗は**
です。このあたりも他と同じかと思います。
また、計算の順番についても算数と同じで、( )の中・べき乗→掛け算・割り算→足し算・引き算という順番です。
整数×整数は当然答えも整数ですが、整数×浮動小数点数の結果は浮動小数点数になります。
このあたりも算数と同じですね🙂ひとつだけ注意点は、整数÷整数は整数に丸められます。
割り算の余りが切り捨てられます。
整数同士の四則演算の答えは整数らしいです…笑
2.ビット演算子
2-1. ビット演算子とは
整数に対してビット単位で演算を行う時、ビット演算子というものが使われます。
「ビット単位で演算」というのは馴染みの無いことですが、多分これからやっていくことになるのでしょうか…🤔
まず、10進数を2進数(ビット単位)に変換します。
変換方法は割愛しますが、例えば10進数で10〜14を2進数に変換すると以下のようになります。
2-2. ビットAND
ビット演算子のひとつ&
(ビットAND)を使ってみます。&
は2つの数字を2進数にし、各桁(各ビット)を比較して、両方1
なら1
を返し、どちらかに0
があれば0
を返します。
言葉の説明では分かりにくいと思うので、図に示します!
下の図で、11 & 14 = 10
となるメカニズムを解説します。
2-3. ビットOR
同様に、ビットORというものもあります。
ビットORは|
で表し、2つの数字を2進数にし、各桁(各ビット)を比較して、どちらかに1
があれば1
を返し、両方0
なら0
を返します。
下の図で、10 | 12 = 14
となるメカニズムを解説します。
2-4. ビットXOR
ビットXORは、^
で表します。2つの数字を2進数にし、各桁(各ビット)を比較して、数字が異なっていれば1
を返し、数字が一致していると0
を返します。
下の図で、10 ^ 12 = 6
となるメカニズムを解説します。
2-5. ビットNOT
ビットNOT(ビット反転)は、~
を使い、2進数にしたときの各桁(各ビット)を0
なら1
に、1
なら0
に反転させます。
~10
なら、10の2進数は1010
なのですが、どうやら0000000000001010
というらしく、反転させて1111111111110101
になります。これを10進数にすると、65525
ではなく-11
になるそうです…笑
なぜ〜〜〜😳😳2進数のマイナスの表現がぼんやりとしか分からないので難しいです。
これまでのまとめを実際にやってみました!
gist.github.com
これらの結果が以下のようになります。
3.シフト演算子
ビット演算子の中に、シフト演算子というものもあります。
左シフトと右シフトがあり、2進数にしたときの各桁(各ビット)を左または右へシフトさせるための演算子です。
左シフトは<<
で表し、右シフトは>>
で表します。
11を2進数で表すと0000000000001011
です。これを左に1つシフトさせると、0000000000010110
となり、10進数にすると22になります。
つまり11 << 1 = 22
となります。
言っていることは分かるのですが…このあたり、符号分からないとちょっと難しいですね🤔
本日は以上です😴