Scalaのオペレータ
オペレータは、指定された数学的および論理演算を実行するようにコンパイラに伝えるために使用される、シンボルです。
次のタイプを含むScalaの豊富な組み込み演算子、:
算術演算子
関係演算子
論理演算子
ビット演算子
代入演算子
次に、我々はより多くのさまざまな演算子の適用よりもあなたに説明します。
算術演算子
次の表は、Scalaのサポート算術演算子を示しています。
10、B 20とし、変数:
演算子 | 説明 | 例 |
---|---|---|
+ | プラス | + Bの演算結果が30であります |
- | マイナス | - Bの演算結果は-10です |
* | 乗算記号 | * Bの演算結果200であります |
/ | 分裂の兆候 | B /演算結果である2 |
% | 残り | B%の計算結果が0であります |
例
object Test { def main(args: Array[String]) { var a = 10; var b = 20; var c = 25; var d = 25; println("a + b = " + (a + b) ); println("a - b = " + (a - b) ); println("a * b = " + (a * b) ); println("b / a = " + (b / a) ); println("b % a = " + (b % a) ); println("c % a = " + (c % a) ); } }
上記のコードの実装、出力は次のようになります。
$ scalac Test.scala $ scala Test a + b = 30 a - b = -10 a * b = 200 b / a = 2 b % a = 0 c % a = 5
関係演算子
次の表は、Scalaは関係演算子をサポートして一覧表示されます。
10、B 20とし、変数:
演算子 | 説明 | 例 |
---|---|---|
== | 同じ | (== B)は演算結果はfalseです |
!= | 等しくありません | (!= B)演算結果が真であります |
> | 越えます | (A> B)演算結果はfalseです |
< | 以下 | (A <B)演算結果が真であります |
> = | 以上 | (A> = B)演算結果が偽であります |
<= | 以下 | (A <= B)演算結果が真であります |
例
object Test { def main(args: Array[String]) { var a = 10; var b = 20; println("a == b = " + (a == b) ); println("a != b = " + (a != b) ); println("a > b = " + (a > b) ); println("a < b = " + (a < b) ); println("b >= a = " + (b >= a) ); println("b <= a = " + (b <= a) ); } }
上記のコードの実装、出力は次のようになります。
$ scalac Test.scala $ scala Test a == b = false a != b = true a > b = false a < b = true b >= a = true b <= a = false
論理演算子
次の表は、Scalaは論理演算子をサポートして一覧表示されます。
1とし、変数は、Bが0であります:
演算子 | 説明 | 例 |
---|---|---|
&& | 論理と | (&& B)演算結果はfalseです |
|| | 論理的または | (|| B)演算結果が真であります |
! | 論理否定 | !(&& B)は演算結果が真であります |
例
object Test { def main(args: Array[String]) { var a = true; var b = false; println("a && b = " + (a&&b) ); println("a || b = " + (a||b) ); println("!(a && b) = " + !(a && b) ); } }
上記のコードの実装、出力は次のようになります。
$ scalac Test.scala $ scala Test a && b = false a || b = true !(a && b) = true
ビット演算子
ビット演算子動作させるために使用されるビット、〜、&、|、^が否定された、およびビット、またはビットによると、次の表の例でビットごとのXOR演算:
P | Q | P&Q | P | Q | P ^ qは |
---|---|---|---|---|
0 | 0 | 0 | 0 | 0 |
0 | 1 | 0 | 1 | 1 |
1 | 1 | 1 | 1 | 0 |
1 | 0 | 0 | 1 | 1 |
A = 60の場合;およびB = 13;バイナリに対応する二つの変数は以下のとおりです。
A = 0011 1100 B = 0000 1101 -------位运算---------- A&B = 0000 1100 A|B = 0011 1101 A^B = 0011 0001 ~A = 1100 0011
Scalaのビットごとのルールを次のように
演算子 | 説明 | 例 |
---|---|---|
& | ビット単位のAND演算子 | (A&B)出力12、バイナリの説明:0000 1100 |
| | ビット単位のOR演算子 | (A | B)出力61、バイナリ説明:00111101 |
^ | ビット単位の排他的論理和演算子 | (A ^ B)49の出力、バイナリ説明:00110001 |
〜 | ビット演算子 | (〜A)-61出力、バイナリの説明:1100 0011記号形式では、2進数を補完します。 |
<< | 左移動体通信事業者 | << 2出力240バイナリの解釈:11110000 |
>> | 右のモバイルオペレーター | A >> 2出力15、バイナリの説明:0000 1111 |
>>> | 符号なし右シフト | >>> 2出力15バイナリ説明:0000 1111 |
例
object Test { def main(args: Array[String]) { var a = 60; /* 60 = 0011 1100 */ var b = 13; /* 13 = 0000 1101 */ var c = 0; c = a & b; /* 12 = 0000 1100 */ println("a & b = " + c ); c = a | b; /* 61 = 0011 1101 */ println("a | b = " + c ); c = a ^ b; /* 49 = 0011 0001 */ println("a ^ b = " + c ); c = ~a; /* -61 = 1100 0011 */ println("~a = " + c ); c = a << 2; /* 240 = 1111 0000 */ println("a << 2 = " + c ); c = a >> 2; /* 215 = 1111 */ println("a >> 2 = " + c ); c = a >>> 2; /* 215 = 0000 1111 */ println("a >>> 2 = " + c ); } }
上記のコードの実装、出力は次のようになります。
$ scalac Test.scala $ scala Test a & b = 12 a | b = 61 a ^ b = 49 ~a = -61 a << 2 = 240 a >> 2 = 15 a >>> 2 = 15
代入演算子
以下は、Scalaの言語サポート代入演算子を示しています。
演算子 | 説明 | 例 |
---|---|---|
= | 単純な代入演算子は、左オペランドに割り当てられた右オペランドを指定します。 | C = A + B、A + Bの演算結果を、Cに割り当てられます |
+ = | 左オペランドに割り当てを追加する前に、割り当て後にオペランドの左右を追加します。 | C + = Aは、C = C + Aに対応します |
- = | 減算割り当てた後、減算後の左オペランドの両側に左右のオペランドがに譲渡されています。 | C - = AはC = Cに対応 - |
* = | その後、割り当てを乗じ、オペランドの左右両側には、左のオペランドに代入する前に乗算されます。 | C * = Aは、C = C * Aに対応します |
/ = | 分割オペランドの左右両側には、左のオペランドに代入した後、割り当て後に分割します。 | C / = Aが同等であるC = C / A |
%= | 割り当て後に残り、左オペランドに割り当てた後の残りのオペランドの左右。 | Cの%= Aは、C = C%Aに相当します |
<< = | ビット演算は、割り当て後に残りました | Cは、<< = 2 C = Cに対応<< 2 |
>> = | 割り当て後のビット単位の右 | C >> = 2はC = C >> 2に相当します |
&= | ビット単位のAND演算後の割り当て | C&= 2はC = C&2と同等です |
^ = | ビット単位の排他的論理和演算子と、割り当てられました | C ^ = 2はC = C ^ 2に相当します |
| = | ビットごとのOR代入した後 | C | 2 | = 2はC = Cに対応します |
例
object Test { def main(args: Array[String]) { var a = 10; var b = 20; var c = 0; c = a + b; println("c = a + b = " + c ); c += a ; println("c += a = " + c ); c -= a ; println("c -= a = " + c ); c *= a ; println("c *= a = " + c ); a = 10; c = 15; c /= a ; println("c /= a = " + c ); a = 10; c = 15; c %= a ; println("c %= a = " + c ); c <<= 2 ; println("c <<= 2 = " + c ); c >>= 2 ; println("c >>= 2 = " + c ); c >>= 2 ; println("c >>= a = " + c ); c &= a ; println("c &= 2 = " + c ); c ^= a ; println("c ^= a = " + c ); c |= a ; println("c |= a = " + c ); } }
上記のコードの実装、出力は次のようになります。
$ scalac Test.scala $ scala Test c = a + b = 30 c += a = 40 c -= a = 30 c *= a = 300 c /= a = 1 c %= a = 5 c <<= 2 = 20 c >>= 2 = 5 c >>= a = 1 c &= 2 = 0 c ^= a = 10 c |= a = 10
演算子の優先順位
式では、データオブジェクトの異なるデータ・タイプとの接続の異なる複数のオペレータを含んでいてもよい;式はさまざまな操作であるため、操作の異なる順序であっても誤動作エラー異なる結果を有することができる場合ためときに、特定の順序に従って、さまざまな操作を含む式は、操作の一意性を結果の合理性と正確性を確保するために組み合わせなければなりません。
優先順位が上から下に降順で、上部が最も高い優先度を持つ、コンマ演算子は、最も低い優先順位を有します。
同じ優先順位レベル、計算の結合順序に従って。 ほとんどの操作は、左から右に計算され、3つだけの優先順位は、彼らは単項演算子、条件演算子、代入演算子は、右から左組み合わせです。
基本的な優先順位は覚えておく必要があります。
- バイナリ演算子より単項最適ポインタ、。 印として。
- 減算後の第1の乗算や除算(モジュラス)。
- 最後のビット・コンピューティングの後の最初の算術シフト演算。 特に注意を払ってください:<< 1 2&3 + 7(1 << + 2(3))&7と同等です
- 最終的な計算論理演算
演算子の種類 | 演算子 | 結合方向 |
---|---|---|
式の評価 | ()[]。Exprに++ expr-- | 左から右 |
単項演算子 | *&+ - !〜++ Exprに--expr * /% + - >> << <> <=> = ==!= | 右から左へ |
ビット演算子 | & ^ | && || | 左から右 |
三項演算子 | ?: | 右から左へ |
代入演算子 | = + = - = * = / =%= >> = << =&= ^ = | = | 右から左へ |
コンマ | 、 | 左から右 |