どぼじょのIT学習ブログ

高専卒土木女子がIT業界を目指してお勉強。

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ではカンマは別の意味になってしまうので、代わりにアンダーバー_を使います。

gist.github.com

出力結果には桁区切りは表示されないのですが、書き間違いは無くなりそうですね😊
f:id:mistyrinth:20181108194624p:plain

1-2. 四則演算

四則演算の方法は、わりと一般的っぽいので、おそらく特別なものはありません!
沢山の言語を知っているわけではありませんが、excelとか他の言語も同じだと思います😶
足し算は+、引き算は-、掛け算は*、割り算は/ですね。
割り算の余りを出すのは%、べき乗は**です。このあたりも他と同じかと思います。
また、計算の順番についても算数と同じで、( )の中・べき乗→掛け算・割り算→足し算・引き算という順番です。
整数×整数は当然答えも整数ですが、整数×浮動小数点数の結果は浮動小数点数になります。
このあたりも算数と同じですね🙂ひとつだけ注意点は、整数÷整数は整数に丸められます。
割り算の余りが切り捨てられます。
整数同士の四則演算の答えは整数らしいです…笑

2.ビット演算子

2-1. ビット演算子とは

整数に対してビット単位で演算を行う時、ビット演算子というものが使われます。
「ビット単位で演算」というのは馴染みの無いことですが、多分これからやっていくことになるのでしょうか…🤔
まず、10進数を2進数(ビット単位)に変換します。
変換方法は割愛しますが、例えば10進数で10〜14を2進数に変換すると以下のようになります。 f:id:mistyrinth:20181108200640p:plain

2-2. ビットAND

ビット演算子のひとつ&(ビットAND)を使ってみます。&は2つの数字を2進数にし、各桁(各ビット)を比較して、両方1なら1を返し、どちらかに0があれば0を返します。
言葉の説明では分かりにくいと思うので、図に示します!
下の図で、11 & 14 = 10となるメカニズムを解説します。
f:id:mistyrinth:20181108202839p:plain

2-3. ビットOR

同様に、ビットORというものもあります。
ビットORは|で表し、2つの数字を2進数にし、各桁(各ビット)を比較して、どちらかに1があれば1を返し、両方0なら0を返します。
下の図で、10 | 12 = 14となるメカニズムを解説します。
f:id:mistyrinth:20181108210912p:plain

2-4. ビットXOR

ビットXORは、^で表します。2つの数字を2進数にし、各桁(各ビット)を比較して、数字が異なっていれば1を返し、数字が一致していると0を返します。
下の図で、10 ^ 12 = 6となるメカニズムを解説します。
f:id:mistyrinth:20181108212202p:plain

2-5. ビットNOT

ビットNOT(ビット反転)は、~を使い、2進数にしたときの各桁(各ビット)を0なら1に、1なら0に反転させます。
~10なら、10の2進数は1010なのですが、どうやら0000000000001010というらしく、反転させて1111111111110101になります。これを10進数にすると、65525ではなく-11になるそうです…笑
なぜ〜〜〜😳😳2進数のマイナスの表現がぼんやりとしか分からないので難しいです。

これまでのまとめを実際にやってみました!

gist.github.com
これらの結果が以下のようになります。
f:id:mistyrinth:20181108221835p:plain

3.シフト演算子

ビット演算子の中に、シフト演算子というものもあります。
左シフトと右シフトがあり、2進数にしたときの各桁(各ビット)を左または右へシフトさせるための演算子です。
左シフトは<<で表し、右シフトは>>で表します。
11を2進数で表すと0000000000001011です。これを左に1つシフトさせると、0000000000010110となり、10進数にすると22になります。
つまり11 << 1 = 22となります。
言っていることは分かるのですが…このあたり、符号分からないとちょっと難しいですね🤔

本日は以上です😴