【VB.Net】算術演算について | i

【VB.Net】算術演算について

今回は、算術演算(計算系)について紹介します。

算数や数学でも四則演算(たし算・ひき算・かけ算・わり算)は習いますよね。
今回は、プログラミング的な演算について詳しく記載します

主な演算子を一覧にすると以下の通りです。
  算数・数学 プログラミング
たし算 +
ひき算 -
かけ算 × *
わり算 ÷ /(Double型)もしくは\(Integer型)
余り …など Mod
べき乗   ^

 

たし算・ひき算はプログラミングと算数・数学で同じ記号です。かけ算・わり算は記号が違いますね。
また違いとしては、プログラミングのわり算の結果は原則「商のみ」となります。そのため、わり算の余りを求めるための記号が存在します。
そして、VB.Netでは、わり算の記号は②種類あり、その違いは計算結果のデータ型です。
/」を使って計算すると結果のデータ型は「Double」型になり、
\」を使って計算すると結果のデータ型は「Integer」型となります。
わり算の際どちらを使用するかは、その時の雰囲気にまかせてください。
ただ、他言語ではわり算の記号に「/」を用いることが多いため、プログラミングに慣れない場合は「/」でわり算の計算を統一しても問題ありません。

演算の書き方はとくに工夫など必要ありません。算数・数学通りの書き方になります。(する数・される数が大切になります。)
Dim a As Integer
Dim b As Integer
Dim result As Integer (計算結果をいれる変数)
a = 10
b = 2
result = 0 とすると、、、

 

    resultの値
たし算   result = a + b 12
ひき算   result = a - b 8
result = b - a -8
かけ算   result = a * b 20
わり算 / result = a / b 5
result = b / a 0
\ result = a \ b 5
result = b \ a 0
余り   result = a Mod b 0
result = b Mod a 2
べき乗   result = a ^ b 100
result = b ^ a 1024
わり算ついて算数的に解説すると
 a ÷ b = 10 ÷ 2 = 5 余り0
 b ÷ a = 2 ÷ 10 = 0 余り2
となるので、
プログラミングの計算例と比較して
\」もしくは「/」の結果が
%」の結果が余りに対応することもわかると思います。
 
余談ですが、、、(プラスαな内容です。)
実は「/」はDouble型の計算結果を返してくれるため、純粋に「b / a 」をした計算結果は「0.2」となり期待通りの動作をしてくれます。

ですが今回、データ型がInteger型の計算結果をいれる器(変数名result)を用意しており、その変数に入れてあげることによって、0.2の小数点以下は切り捨てられ結果は0となります。
(1) result = b / a
(2) result = 2 / 10
(3) result = 0.2
(4) result = 0
のような感じで。
(3)では計算結果がDouble型の「0.2」となり、そのあとの(4)でInteger型の変数resultに代入することによって、小数点以下が切り捨てられる仕組みになっています。


話を戻しまして、つぎのべき乗もどちらを肩に乗せるかによって計算が変わりますよね。

a ^ b (aのb乗) = 102 = 10 × 10 (10を2回かける)= 100
b ^ a (bのa乗) = 210= 2 × 2 × 2 × 2 × 2 × 2 × 2 × 2 × 2 × 2 (2を10回かける)= 1024

また、負数(マイナス値)の扱いは注意です。
例えば、「 -3 ^ 2 」と「 (-3) ^ 2 」では結果が異なります。
一見どちらも結果は「9」になりそうに見えますが。。

-3 ^ 2 = - ( 3 ^ 2 ) = - ( 3 × 3 ) = -9
(-3) ^ 2 = (-3) × (-3) = 9

プログラミングの演算記号は一個前の値と計算する性質上、
-3の場合は、先頭のマイナス記号が一旦無視され、3がべき乗される対象とみられます。
(-3)の場合はカッコでくくっているため、(-3)がべき乗される対象としてみなされます。
なぜそんな動きをするのかというと、プログラミングの計算優先順位ってやつと関わってきます。

「負数の3(「-3」)」としてとらえるか、「ひき算の記号と正数の3(「-」「3」)」としてとらえるか、コンピュータは察することができないので、
しっかりカッコでくくってどこまでがセットであるかを指定し、計算の優先順位を決めてあげることが必要なのです。

計算の優先順位の抜粋は以下です。
べき乗 ^
単項演算子(正負の記号) +、-
| かけ算・わり算 *、/
| 整数のわり算 \
余り Mod
たし算・ひき算 +、-

 

算数や数学にも計算の優先順位などありますよね。そのへんはプログラミングの計算順位と似通っていますね!