FreeBASIC マニュアルのトップに戻る

FreeBASIC OpPrecedence

目次→教本→プログラマーのための案内Operator Precedence←オリジナル・サイト

演算子の優先順位 左にメニュー・フレームが表示されていない場合は、ここをクリックして下さい

←リンク元に戻る プログラム開発関連に戻る

一つの式で、複数の演算をするとき、各演算は、あらかじめ定められた順番で、値を求めて、処理されます。
これは、演算や演算子の優先順位と呼ばれます。

式で、演算子が、より上位の優先順位を持つなら、それは下位の優先順位の演算子より先に、値を求められます。

演算子の優先順位が等しいなら、これらは、その結合規則の順で、評価されます。
結合規則は、左から右か、右から左の順の、いずれかです。

規則として、2項演算子(+, ^ など)、および単項の接尾辞演算子((), -> など)は、左から右に値を求めます。
単項の単項演算子(Not, @ など)は、右から左に値を求めます。

結合規則が、「なし」の演算子は、この演算子が使われる式が、優先順位や結合規則によって、操作の順序がチェックされる必要がある所で、登場しないことを意味しています。
Cast など、関数のような演算子は、それらの構文で必要とされる括弧のために、いつも最初に値を求められます。
そして、代入演算子は、いつも最後に値を求められます。

丸括弧は、演算子の優先順位をくつがえすために、使えます。
丸括弧の中の演算は、他の操作の前に、実行されます。
丸括弧の中では、通常の演算子の優先順位が、使用されます。

下の表は、演算子の優先順位を、最も優先順位の高いものから、最も低いものまで、順に記載しています。
表の中の、演算子の項目が空白の行は、等しい優先順位を持っている演算子のグループを、現しています。

最も高い優先順位

演算子 内容 結合規則



CAST 型変換 なし
PROCPTR 手続きポインタ なし
STRPTR 文字列ポインタ なし
VARPTR 変数ポインタ なし

配列関連
[] 文字列インデックス 左から右
[] ポインタ・インデックス 左から右
() 配列インデックス 左から右
() 関数呼び出し 左から右
. メンバーアクセス 左から右
-> メンバーアクセスへのポインタ 左から右

ポインタ関連
@ のアドレス 右から左
* の値 右から左
New メモリを割り当て 右から左
Delete メモリの割り当てを解除 右から左

算術演算
^ べき乗 左から右



- 否定 右から左



* 乗算 左から右
/ 除算 左から右



\ 整数除算(余り切り捨て) 左から右



MOD 剰余(まるめ) 左から右



SHL 左にシフト(移行) 左から右
SHR 右にシフト(移行) 左から右



+ 足す(加法) 左から右
- 引く(減法) 左から右



& 文字列連結 左から右



Is 実行時型情報チェック なし



= 同等(一致) 左から右
<> 等しくない(不一致) 左から右
< 少なり(未満) 左から右
<= 以下 左から右
>= 以上 左から右
> 大なり 左から右

論理演算
NOT 否定(補数) 右から左



AND 論理積(結合) 左から右



OR 論理和 左から右



EQV 同値 左から右
IMP 包含 左から右
XOR 排他的論理和 左から右



ANDALSO 短絡論理積(短絡結合) 左から右
ORELSE 短絡論理和(短絡包含的選言) 左から右

複合代入演算子
=[>] 代入 なし
&= 連結して代入 なし
+= 加えて代入 なし
-= 引いて代入 なし
*= 掛けて代入 なし
/= 割って代入 なし
\= 整数除算して代入 なし
^= べき乗して代入 なし
MOD= 剰余値を代入 なし
AND= 論理積値を代入 なし
EQV= 論理等価値を代入 なし
IMP= 論理包含値を代入 なし
OR= 論理和値を代入 なし
XOR= 排他的論理和値を代入 なし
SHL= 左シフトして代入 なし
SHR= 右シフトして代入 なし
LET 代入 なし



LET() 代入 なし
最も低い優先順位


いつくかのケースで、優先順位が、混乱させるか直観に反した結果を引き起こすことがあります。
下に、いくつかの例を掲示します:
'' 負数をべき乗しようとする
-2 ^ 2
期待する結果:  (-2) ^ 2 = 4
実際の 結果:  -(2 ^ 2) = -4

'' trying to test a bit in a number
n And 1  <>  0
期待する結果:  (n And 1) <> 0
実際の 結果:   n And (1 <> 0)

'' trying to shift a number by n+1 bits
a Shl n+1
期待する結果:  a Shl (n + 1)
実際の 結果: (a Shl n) + 1

演算子の先行が曖昧かもしれない式については、エラーの可能性を最小限にして、かつコードを読む人に分かりやすいよいように、式の該当部分を括弧で囲むことを、推奨します。

参照:

目次に戻る
プログラマーのための案内に戻る
←リンク元に戻る プログラム開発関連に戻る

ページ歴史:2022-05-29 04:26:48
日本語翻訳:WATANABE Makoto、原文著作者:RandyKeeling

ホームページのトップに戻る

表示-非営利-継承