Swift オペレーター
Swift 演算子
演算子は、コンパイラーに数学的演算または論理演算を実行するように指示するために使用される記号です。
Swift は次の演算子を提供します:
算術演算子
比較演算子
論理演算子
ビット演算子
代入演算子
間隔演算子
その他の演算子
この章では、算術演算子、関係演算子、論理演算子、ビット演算子、代入演算子、その他の演算子を詳しく紹介します。
算術演算子
次の表は、Swift 言語でサポートされている算術演算子のリストです。ここで、変数 A は 10、変数 B は 20 です。
− | マイナス記号 | |
---|---|---|
* | 乗算記号 | |
/ | 除数 | |
% | 余りを求める | |
++ | 増分 | |
-- | 自己減少 | |
例 | ||
上記のプログラムの実行結果は次のとおりです。 | 比較演算子 | 以下の表は、Swift 言語でサポートされている比較演算子のリストです。変数 A は 10、変数 B は 20 です。 = |
に等しい(A = = B)は偽です。
!=
は (A != B) と等しくありません。
が | より大きい(A>B)は偽です。 | |
---|---|---|
は | より小さい(A | |
が | 以上である(A>=B)は偽です。 | |
が | (A<=B)以下である場合はtrueです。 | |
以下は比較演算の簡単な例です: | import Cocoa var A = 10 var B = 20 print("A == B 结果为:\(A == B)") print("A != B 结果为:\(A != B)") print("A > B 结果为:\(A > B)") print("A < B 结果为:\(A < B)") print("A >= B 结果为:\(A >= B)") print("A <= B 结果为:\(A <= B)") | 上記のプログラムの実行結果は次のとおりです: A == B 结果为:false A != B 结果为:true A > B 结果为:false A < B 结果为:true A >= B 结果为:false A <= B 结果为:true |
次の表は、Swift言語でサポートされている論理演算子のリストです。変数 A が true、変数 B が false の場合: | 演算子 | |
インスタンス | && |
(A && B) は誤りです。
||
論理和。 演算子の 2 つの側面の少なくとも 1 つが TRUE の場合は TRUE。 (A || B) は true です。
論理否定。ブール値を否定すると、true は false になり、false は true になります。 | !(A && B) は true です。 |
---|
0 | 0 | 0 | 0 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 1 | 1 | 1 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
1 | 1 | 0 | 1 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
0 | 1 | 1 |
Operator | Description | Example | |
---|---|---|---|
ビット単位の AND。ビット単位の AND 演算子は 2 つの数値を演算し、両方の入力数値の同じビットが 1 である場合にのみ、この数値の各ビットが 1 になります。 | (A & B) 結果は 12 で、バイナリでは 0000 1100 | ||
のビットごとの OR です。ビット単位の OR 演算子 | 2 つの数値を比較し、新しい数値を返します。この数値の各ビットを 1 に設定する条件は、2 つの入力数値の同じビットが 0 でないことです (つまり、どちらか一方が 1、または両方が 1)。は 1 1) です。 | (A | B) 結果は 61 で、これは 2 進数で 0011 1101 です。各ビットが 1 に設定される条件は、2 つの入力数値の同じビットが異なることです。それらが同じである場合、 0に設定されます。 | ||
~ | ビットごとの否定演算子~ は、オペランドの各ビットを否定します。 | ||
<< | ビットごとに左シフトします。左シフト演算子 (<<) は、オペランドのすべてのビットを指定されたビット数だけ左にシフトします。 | 下の図は、11111111 << 1 (11111111 を 1 ビット左にシフト) の結果を示しています。青色の数字はシフトされたビットを表し、灰色は破棄されたビットを表し、空のビットはオレンジ色の 0 で埋められます。 | |
A << 2 結果は 240 で、バイナリでは 1111 0000 | >> ビット単位の右シフトです。右シフト演算子 (<<) は、オペランドのすべてのビットを指定されたビット数だけシフトします。 | 下の図は、11111111 >> 1 (11111111 を 1 つ右にシフト) の結果を示しています。青色の数字はシフトされたビットを表し、灰色は破棄されたビットを表し、空のビットはオレンジ色の 0 で埋められます。 | A >> 2 結果は 15、バイナリは 0000 1111 です |
以下はビット演算の簡単な例です:
import Cocoa var A = 60 // 二进制为 0011 1100 var B = 13 // 二进制为 0000 1101 print("A&B 结果为:\(A&B)") print("A|B 结果为:\(A|B)") print("A^B 结果为:\(A^B)") print("~A 结果为:\(~A)")
上記のプログラムの実行結果は次のとおりです:
A&B 结果为:12 A|B 结果为:61 A^B 结果为:49 ~A 结果为:-61
操作
次の表は、Swift 言語の基本的な代入操作を示しています:
演算子 | 説明 | 例 |
---|---|---|
= | 右オペランドを左オペランドに代入する単純な代入操作。 | C = A + B A + Bの演算結果をC |
+= | に代入し、左オペランドと右オペランドを加算して左オペランドに代入します。 | C += A は、C = C + A |
-= | と同等です。左と右のオペランドを減算して、その値を左のオペランドに代入します。 | C -= A は C = C - A |
*= | と同等です。代入する前に乗算し、左右のオペランドを乗算してから左のオペランドに代入します。 | C *= A は C = C * A |
/= | と同等であり、左オペランドと右オペランドを除算して、その値を左オペランドに代入します。 | C /= A は C = C / A と同等です |
%= | 値を割り当てる前に剰余を計算し、左側のオペランドに値を割り当てます。 | C %= A は C = C % A と同等です |
<<= | ビット単位で左にシフトしてから値を割り当てます | C <<= 2 は C = C <= と同等です。 < 2 |
ビット単位でシフトして値を代入します | C >>= 2 は C = C >> と同等です | |
AND 演算 代入後 | C &= 2 は C = C & 2 と同等 | |
ビットごとの XOR 演算子の後に代入 | C ^= 2 は C = C ^ 2 と同等 | |
ビットごとの OR 演算と代入 | C |= 2 は C = C 2 |
import Cocoa var A = 10 var B = 20 var C = 100 C = A + B print("C 结果为:\(C)") C += A print("C 结果为:\(C)") C -= A print("C 结果为:\(C)") C *= A print("C 结果为:\(C)") C /= A print("C 结果为:\(C)") //以下测试已注释,可去掉注释测试每个实例 /* C %= A print("C 结果为:\(C)") C <<= A print("C 结果为:\(C)") C >>= A print("C 结果为:\(C)") C &= A print("C 结果为:\(C)") C ^= A print("C 结果为:\(C)") C |= A print("C 结果为:\(C)") */
上記のプログラムの実行結果
C 结果为:30 C 结果为:40 C 结果为:30 C 结果为:300 C 结果为:30間隔演算子
Swift には 2 つの範囲演算子が用意されています。
説明 | 例 | |
---|---|---|
閉区間演算子 (a...b) は、a から b までのすべての値 (a と b を含む) を含む値を定義します区間では、b は a 以上である必要があります。閉範囲演算子は、for-in ループなど、範囲のすべての値を反復処理する場合に非常に便利です: | 1...5 範囲の値は 1、2、3、4、5 です。 | |
半開区間 (a.. | 1..<5 間隔の値は 1、2、3、4 です |
三項演算子は 3 つのオペランドを操作します。C 言語と同様、Swift には三項演算子 (a ? b : c ) が 1 つだけあります。 | ||
---|---|---|
説明 | インスタンス | |
数字の前に-プレフィックスを追加 | -3または-4 | |
+ 記号プレフィックスを追加デジタルマネー | +6 結果は6です |
以下は、単項演算、二項演算、および三項演算の簡単な例です:
import Cocoa var A = 1 var B = 2 var C = true var D = false print("-A 的值为:\(-A)") print("A + B 的值为:\(A + B)") print("三元运算:\(C ? A : B )") print("三元运算:\(D ? A : B )")
上記のプログラムの実行結果は次のとおりです:
-A 的值为:-1 A + B 的值为:3 三元运算:1 三元运算:2
演算子の優先順位
式には、異なる演算子を持つ複数の接続演算子が含まれる場合があります。 異なる演算子を持つデータ オブジェクトデータ型; 式には複数の演算があるため、演算の順序が異なると異なる結果が生じたり、誤った演算エラーが発生したりする可能性があります。これは、式に複数の演算が含まれる場合、演算の合理性を確保するためにそれらを特定の順序で組み合わせる必要があるためです。結果の正確さと独自性。
優先順位は上から下に下がり、一番上の優先順位が最も高く、カンマ演算子の優先順位が最も低くなります。
同じ優先度内では、組み合わせの順序に基づいて計算されます。ほとんどの演算は左から右に計算され、右から左に組み合わされる優先順位は 3 つだけです。これらは、単項演算子、条件演算子、代入演算子です。
基本的な優先順位を覚えておく必要があります:
ポインターは最適であり、単眼操作は両眼操作よりも優れています。プラス記号やマイナス記号など。
最初に乗算と除算 (モジュロ) を実行し、次に加算と減算を行います。
最初に算術演算、次にシフト演算、最後にビット演算です。特に注意してください: 1 << 3 + 2 & 7 は (1 << (3 + 2))&7 と同等です
論理演算の最終計算
演算子の型 | 演算子 | は、方向 |
---|---|---|
の式演算 | () [] . expr++ expr-- | 左から右 |
単項演算子 | * & + - ~ ++expr - を組み合わせます。 - expr * / % + - > << <<= >= == != | 右から左へ演算 表記法 |
^ | | && || 左から右 | 三項演算子 |
右から左 | 代入演算子 | |
右から左 | カンマ | |
左から右 | 以下オペレータ優先度の簡単な例: |
A 的值为:4分析例:
オペレータ優先度に従って、上記プログラムの動作は次のステップに分析できます。この式は次と同等です: 2 + ((3 * 4) % 5)
最初のステップは、以下を計算することです:
(3 * 4) = 12 なので、式は次と同等です:
2 + (12 % 5)2 番目のステップは、12 % 5 = 2 を計算することです。したがって、式は次と同等です:
2 + 2
この時点では、次のようになります。計算結果が 4 であることが簡単にわかります。