Cava は、算術、比較、ビット単位、論理、代入の各操作に対応する 5 種類の演算子をサポートしています。このページでは、各演算子の動作、サポートされるデータ型、および優先順位ルールについて説明します。
Cava は条件演算子(三項演算子)(?:)をサポートしていません。if 文をご使用ください。
算術演算子
すべての算術演算子は数値型で動作します。例として使用する変数:int left = 20, right = 10。
| 演算子 | 名前 | 説明 | 例 | 結果 |
|---|---|---|---|---|
+ | 加算 | 両方のオペランドを加算します | left + right | 30 |
- | 減算 | 左オペランドから右オペランドを減算します | left - right | 10 |
* | 乗算 | 両方のオペランドを乗算します | left * right | 200 |
/ | 部門 | 左オペランドを右オペランドで除算します | left / right | 2 |
% | 剰余 | 除算の余りを返します | left % right | 0 |
++ | インクリメント | オペランドに 1 を加算します | left++ | left は 21 |
-- | デクリメント | オペランドから 1 を減算します | left-- | left は 19 |
注:/の右オペランドは0にできません。0 にした場合、ゼロ除算エラーがトリガーされます。
後置インクリメントと前置インクリメント:++(および --)の位置によって、代入に対するインクリメントのタイミングが変わります。int b = a++ は、まず a を b に代入してから a をインクリメントします。int b = ++a は、まず a をインクリメントしてから a を b に代入します。
関係演算子
関係演算子は 2 つのオペランドを比較し、boolean 型の結果を返します。if 条件文で使用します。例として使用する変数:int left = 20, right = 10。
| オペレーター | 名前 | 説明 | 例 | 結果 |
|---|---|---|---|---|
> | より大きい | true(left > right の場合) | left > right | true |
< | より小さい | true(left < right の場合) | left < right | false |
>= | 以上 | true left が right 以上の場合 | left >= right | true |
<= | 以下 | true、left <= right の場合 | left <= right | false |
== | 等しい | true 両方のオペランドが等しい場合 | left == right | false |
!= | 等しくない | true オペランドが異なる場合 | left != right | true |
ビット単位演算子
ビット単位演算子はバイナリレベルで動作し、INT、LONG、SHORT、CHAR、BYTE 型でサポートされています。例として使用する変数:int left = 1(バイナリ:01)、right = 2(バイナリ:10)。
| 演算子 | 名前 | 説明 | 例 | 結果 |
|---|---|---|---|---|
& | ビット AND | 両方のオペランドが 1 であるビット位置ごとに 1 | left & right (01 & 10) | 0 (00) |
| | ビット OR | いずれかのオペランドが 1 であるビット位置ごとに 1 | left | right (01 | 10) | 3 (11) |
^ | ビット XOR | オペランドが異なるビット位置ごとに 1 を返します | left ^ right (01 ^ 10) | 3 (11) |
~ | ビット NOT | オペランドの全ビットを反転します | ~left (~01) | -2 |
<< | 左シフト | 指定されたビット数だけビットを左にシフトします | left << 2 (01 << 2) | 4 (0100) |
>> | 右シフト | 指定されたビット数だけビットを右にシフトします | right >> 1 (10 >> 1) | 1 (01) |
論理演算子
論理演算子は boolean 式を組み合わせます。例として使用する変数:boolean left = true, right = false。
| 演算子 | 名称 | 説明 | 例 | 結果 |
|---|---|---|---|---|
&& | 論理積 (AND) | true が両方のオペランドで評価された場合に true | left && right | false |
|| | 論理和 (OR) | true が少なくとも一方のオペランドで評価された場合に true | left || right | true |
! | 論理否定 (NOT) | ブール値を反転します | !left | false |
代入演算子
代入演算子は変数に値を代入します。複合代入演算子は、操作と代入を組み合わせたものです。例として使用する変数:int left = 1, right = 2。
| 演算子 | 名前 | 意味 | 例 | left 後 |
|---|---|---|---|---|
= | 代入 | left = right | left = right | 2 |
+= | 加算代入 | left = left + right | left += right | 3 |
-= | 減算代入 | left = left - right | left -= right | -1 |
*= | 乗算代入 | left = left * right | left *= right | 2 |
/= | 部門割り当て | left = left / right | left /= right | 0 |
%= | 剰余代入 | left = left % right | left %= right | 1 |
&= | ビット AND 代入 | left = left & right | left &= right | 0 |
|= | ビット OR 代入 | left = left | right | left |= right | 3 |
^= | ビット XOR 代入 | left = left ^ right | left ^= right | 3 |
<<= | 左シフト代入 | left = left << right | left <<= right | 4 |
>>= | 右シフト代入 | left = left >> right | left >>= right | 0 |
演算子の優先順位
式に複数の演算子が含まれる場合、Cava は以下の順序(優先順位が高い順)で評価を行います。
| 優先順位 | 名前 | 演算子 | 結合規則 |
|---|---|---|---|
| 1(最高) | グループ化、メンバーアクセス | () [] . | 左から右 |
| 2 | 単項、インクリメント、デクリメント | ! +(単項) -(単項) ~ ++ -- | 右から左 |
| 3 | 乗法的 | * / % | 左から右 |
| 4 | 加算的 | + - | 左から右 |
| 5 | シフト | << >> | 左から右 |
| 6 | 関係 | < <= > >= | 左から右 |
| 7 | 等価性 | == != | 左から右 |
| 8 | ビット AND | & | 左から右 |
| 9 | ビット XOR | ^ | 左から右 |
| 10 | ビット OR | | | 左から右 |
| 11 | 論理 AND | && | 左から右 |
| 12 | 論理 OR | || | 左から右 |
| 13(最低) | 代入 | = += -= *= /= %= &= |= ^= ~= <<= >>= | 右から左 |
複雑な式では、優先順位ルールが直感的でない場合があります。評価順序を明示するために、括弧 () を使用してください。
int a = 1;
int b = 2;
int c = a * (b + 2); // b + 2 が最初に評価され、その後 a との乗算が行われます