2.02.演算子

以下の演算子が使用可能です。

レベル1: () ! ~ + - ++ --

レベル2: * / % \

レベル3: + . -

レベル4: << < <= >>> >> > >= == !=

レベル5: & && | || ^ ?:

レベル6: , = += -= *= /= %= \= .= &= |= ^= <<= >>>= >>=

()で計算の順番を明示しなければ、レベルの小さい演算子が優先して計算されます。

レベル1の + - は符号(単項演算子)で、レベル3の + - は加減算(2項演算子)です。

(オリジナルのSPALMには \ >>> += -= *= /= %= \= .= &= |= ^= <<=

>>>= >>= はありません)

(互換モード(spmode(1))では、3項演算子(?:)の末尾にセミコロン(;)が必要です)


2.2.1.演算子の詳細


(1)レベル1の演算子

() 括弧。括弧内を先に計算します。

! 論理否定(NOT)。0なら1を、非0なら0を返します。

~ 補数。ビット反転した値を返します。

+ 正符号。正であることを示します。

- 負符号。負であることを示します。

++ インクリメント。変数に1を足します。

変数の前に書いたときは 足してから値を評価します。

変数の後に書いたときは 値を評価してから足します。

-- デクリメント。変数から1を引きます。

変数の前に書いたときは引いてから値を評価します。

変数の後に書いたときは値を評価してから引きます。


(2)レベル2の演算子

* 乗算。掛け算をします。

/ 除算。割り算をします。

% 剰余。割り算をして余りを求めます。

\ 整数除算。割り算をして結果を整数化します。


(3)レベル3の演算子

+ 加算。足し算をします。

- 減算。引き算をします。

. ドット。文字列を連結します。


(4)レベル4の演算子

== 左辺と右辺が等しければ1を、そうでなければ0を返します。

!= 左辺と右辺が異なれば1を、そうでなければ0を返します。

< 左辺が右辺より小さければ1を、そうでなければ0を返します。

<= 左辺が右辺より小さいか等しければ1を、そうでなければ0を返します。

> 左辺が右辺より大きければ1を、そうでなければ0を返します。

>= 左辺が右辺より大きいか等しければ1を、そうでなければ0を返します。

<< 左シフト。左辺を右辺の数の分だけ左にビットシフトします。

>> 右シフト(符号あり)。左辺を右辺の数の分だけ右にビットシフトします。

>>> 右シフト(符号なし)。左辺を右辺の数の分だけ右にビットシフトします。


(5)レベル5の演算子

&& 論理積(AND)。左辺と右辺の両方が非0ならば1を、そうでなければ0を返します。

左辺が0の場合、右辺は評価されません。

|| 論理和(OR)。左辺と右辺のいずれかが非0ならば1を、そうでなければ0を返します。

左辺が非0の場合、右辺は評価されません。

& ビット単位の論理積(AND)。ビットごとの論理積(AND)をとった値を返します。

| ビット単位の論理和(OR)。ビットごとの論理和(OR)をとった値を返します。

^ ビット単位の排他的論理和(XOR)。ビットごとの排他的論理和(XOR)をとった値を返します。

?: 3項演算子。式1?式2:式3 の形で記述します。

式1が非0であれば式2を評価します。式1が0であれば式3を評価します。

(互換モード(spmode(1))では、式3の末尾にセミコロン(;)が必要です)


(6)レベル6の演算子

, カンマ。括弧内で使用します。複数の式を評価して、最後の式の値を返します。

= 代入。左辺に右辺を代入します。

+= 加算代入。左辺に右辺を足したものを 左辺に代入します。

-= 減算代入。左辺から右辺を引いたものを 左辺に代入します。

*= 乗算代入。左辺に右辺を掛けたものを 左辺に代入します。

/= 除算代入。左辺を右辺で割ったものを 左辺に代入します。

%= 剰余代入。左辺を右辺で割った余りを 左辺に代入します。

\= 整数除算代入。左辺を右辺で割って整数化したものを 左辺に代入します。

.= 文字列連結代入。左辺に右辺の文字列を連結したものを 左辺に代入します。

&= ビット論理積(AND)代入。左辺と右辺のビットごとの論理積(AND)をとった値を 左辺に代入します。

|= ビット論理和(OR)代入。左辺と右辺のビットごとの論理和(OR)をとった値を 左辺に代入します。

^= ビット排他的論理和(XOR)代入。左辺と右辺のビットごとの排他的論理和(XOR)をとった値を 左辺に代入します。

<<= 左シフト代入。左辺を右辺の数の分だけ左にビットシフトした値を 左辺に代入します。

>>= 右シフト代入(符号あり)。左辺を右辺の数の分だけ右にビットシフトした値を 左辺に代入します。

>>>= 右シフト代入(符号なし)。左辺を右辺の数の分だけ右にビットシフトした値を 左辺に代入します。


(2019-4-13)