演算子の優先順位

一覧表->VisualBasicの演算子の優先順位

 

100+10×4=

電卓や携帯電話の電卓機能でこの式をそのまま順番に入力していくと、まず100+10×までを入力したところで100+10が計算されて110が表示され、その後4=と入力すると110×4=440が表示される。

しかし、数学ではこの式は、

100 + (10 × 4) =

と、いう順序で計算を行うという決まりであるから、正しくは10×4を先に計算して、140という答えを出さなければならない。

プログラムでは、数学の計算同様、べき乗や乗算を優先して計算する。

たとえば、

100 + 10 * 2 ^ 3

という計算式は

100 + (10 * (2 ^ 3))

という順序で計算され、答えは 180になる。

一般的には、演算子に優先順位が決められており、優先順位の高い演算から先に計算される。

以下に、VisualBasicで使用する演算子の優先順位を示す。

VisualBasicの演算子の優先順位

順位 演算子
1 ^
2 (符号としての) + -
3 * /
4 \
5 Mod
6 (加減算の)+ -, (文字列の結合の) +
7 (文字列連結の) &
8
<< >>
9
=, <>, <, <= >, >= Is, IsNot, Like, TypeOf,
10 Not
11
And, AndAlso
12
Or, OrElse
13
Xor

優先順位の高い(表の上側)から順に計算される。

例: 3 + 4 * 5 ^ 2 は 3 + (4 * (5 ^ 2))) と計算される。

赤色の演算子は本講義では使わないので説明はしない。ただし、自分で勉強して演習等で使ってもかまわない。

 

練習2

以下の計算をVisualBasic中で行う式を書きなさい。ただし余分な括弧はなるべく省きなさい。

(1) 180円のチョコレート2個と110円のジュース23個の合計金額

(2) 1辺2.5mの立方体と、1辺8mの立方体2個と、1辺0.5mの立方体23個の体積の合計

(3) 8cmCDの個数をx個、12cmCDの個数をyとした時、これらのCDの重量の合計。ただしCDの重さは1平方センチあたり1gとし、8cmCDの直径は8cmちょうど、12cmCDの直径は12cmちょうど、中央の穴の重量は無視する(穴がないものとして重量を計算する)

なお、Math.Pi を円周率=3.1415...として使用できる。

少し考えてから答えを見よう

 

->練習2の答え

演算子の優先順位は「オンラインマニュアル」でも確認することができる。

練習3

オンラインマニュアルで演算子の優先順位を確認しよう

メニューから「ヘルプ」>「目次」を選ぶ

以下の順序でドキュメントを開く

  • 開発ツールと言語ドキュメント
  • VisualStudioドキュメント
  • Visual Basic
  • リファレンス
  • Visual Basic リファレンス
  • 演算子
  • Visual Basicにおける 演算子の優先順位
  • 以下の式はどのような順序で計算されますか? 括弧であらわしなさい。

  • a + b Mod c
  • a Mod b / c
  • a ^ b + c
  • a / b * c
  • -->練習3の答え

    オンラインマニュアルには「文字列連結」、「比較演算子」という演算子が出てくるが、これらについてはもう少し後で説明する。

    括弧は通常の数式と同じように使用することができる。ただし、括弧の種類は一種類だけである。

    たとえば、xにyを加え、2倍して、1を加え、10倍する、という計算は

    ((x+y)*2+1)*10

    のように書く。余分な括弧があってもかまわない。しかし、空の括弧や、左右の括弧が対応していない括弧や、変数名や数値の間に割り込む括弧を書くことはできない。

    たとえば、以下の式はすべて同じ意味だ。

    (( x + y ) * 2 + 1) * 10

    ((( x + y ) * 2 ) + 1 ) * 10

    (((( x ) + ( y ) ) * ( 2 )) + ( 1 )) * ( 10 )

    しかし、以下の式はすべて誤りだ。

    (x + y ) * 2 + 1 ) * 10

    ((( ) x + y ) * 2 + 1 ) * 10

    (( x + y ) * 2 + 1 ) * (1)(0)

     

    練習4

    以下のうち、誤った式はどれか? (複数ある)

    a + b / c

    (a - a) + (a - a) / 1

    (((((x)))))

    (((a + 1) * 2) + 3)

    {[( x + 1) * 2] - [x * 3] + 3}

    0 / x

    2 ** 4

    3 ++ 4

    x++

    ((( x + 128) mod (x + 1) - (x * 3)) + 2) * 2

     

    -->練習4の答え

     

    練習2 の答え

    答え

    (1) 180 * 2 + 110 * 23

    (2) 2.5 ^ 3 + 8 ^ 3 * 2 + 0.5 ^ 3 * 23

    (3) Math.PI * (8 / 2)^ 2 * x + Math.PI * (12 / 2) ^ 2 * y

    練習3 の答え

    答え

    • a + (b Mod c)
    • a Mod (b / c)
    • (a ^ b) + c
    • (a / b) * c

     

    練習4 の答え

    答え

    正   a + b / c

    正   (a - a) + (a - a) / 1

    正   (((((x)))))

    正   (((a + 1) * 2) + 3)

    誤  {[( x + 1) * 2] - [x * 3] + 3}

    正   0 / x

    誤  2 ** 4

    誤  3 ++ 4

    誤  x++

    正   ((( x + 128) mod (x + 1) - (x * 3)) + 2) * 2