Swift オペレーター


Swift 演算子

演算子は、コンパイラーに数学的演算または論理演算を実行するように指示するために使用される記号です。

Swift は次の演算子を提供します:

  • 算術演算子

  • 比較演算子

  • 論理演算子

  • ビット演算子

  • 代入演算子

  • 間隔演算子

  • その他の演算子

この章では、算術演算子、関係演算子、論理演算子、ビット演算子、代入演算子、その他の演算子を詳しく紹介します。


算術演算子

次の表は、Swift 言語でサポートされている算術演算子のリストです。ここで、変数 A は 10、変数 B は 20 です。

プラス記号A + B 結果は30−マイナス記号A − B 結果は-10*乗算記号A * B 結果は200/除数B / A 結果は 2%余りを求めるB % A 結果は 0++増分A++結果は11です--自己減少A--結果は 9 です以下は算術演算の簡単な例です:
import Cocoa

var A = 10
var B = 20

print("A + B 结果为:\(A + B)")
print("A - B 结果为:\(A - B)")
print("A * B 结果为:\(A * B)")
print("B / A 结果为:\(B / A)")
A++
print("A++ 后 A 的值为 \(A)")
B--
print("B-- 后 B 的值为 \(B)")
A + B 结果为:30
A - B 结果为:-10
A * B 结果为:200
B / A 结果为:2
A++ 后 A 的值为 11
B-- 后 B 的值为 19
比較演算子以下の表は、Swift 言語でサポートされている比較演算子のリストです。変数 A は 10、変数 B は 20 です。 =は
上記のプログラムの実行結果は次のとおりです。

に等しい(A = = B)は偽です。

!=


(A != B) と等しくありません。

><>=<=例以下は比較演算の簡単な例です: 上記のプログラムの実行結果は次のとおりです: 論理演算子 演算子 説明 インスタンス && 論理 AND。演算子の両側が TRUE の場合は TRUE。
より大きい(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 です。

!

以下は論理演算の簡単な例です:

import Cocoa

var A = true
var B = false

print("A && B 结果为:\(A && B)")
print("A || B 结果为:\(A || B)")
print("!A 结果为:\(!A)")
print("!B 结果为:\(!B)")

上記のプログラムの実行結果は次のとおりです:

A && B 结果为:false
A || B 结果为:true
!A 结果为:false
!B 结果为:true

ビット演算子

ビット演算子はバイナリビットの演算に使用され、~、&、|、^は否定です。次の表の例に示すように、それぞれ、ビット単位の AND、ビット単位の AND、またはビット単位の AND、および XOR 演算です。

論理否定。ブール値を否定すると、true は false になり、false は true になります。 !(A && B) は true です。
00000010111111010011

A = 60; および B = 13; を指定すると、2 つの変数に対応するバイナリは次のようになります:

A = 0011 1100

B = 0000 1101

ビット演算を実行します:

& |(A ^ B) 結果は 49 で、2 進数では 0011 0001 です~(~A ) の結果は -61 になります。これは、2 進数では 2 の補数形式で 1100 0011 になります。<<下の図は、11111111 << 1 (11111111 を 1 ビット左にシフト) の結果を示しています。青色の数字はシフトされたビットを表し、灰色は破棄されたビットを表し、空のビットはオレンジ色の 0 で埋められます。 A << 2 結果は 240 で、バイナリでは 1111 0000下の図は、11111111 >> 1 (11111111 を 1 つ右にシフト) の結果を示しています。青色の数字はシフトされたビットを表し、灰色は破棄されたビットを表し、空のビットはオレンジ色の 0 で埋められます。 s6.png
OperatorDescriptionExample
ビット単位の AND。ビット単位の AND 演算子は 2 つの数値を演算し、両方の入力数値の同じビットが 1 である場合にのみ、この数値の各ビットが 1 になります。 s1.png(A & B) 結果は 12 で、バイナリでは 0000 1100
のビットごとの OR です。ビット単位の OR 演算子 | 2 つの数値を比較し、新しい数値を返します。この数値の各ビットを 1 に設定する条件は、2 つの入力数値の同じビットが 0 でないことです (つまり、どちらか一方が 1、または両方が 1)。は 1 1) です。 s2.png(A | B) 結果は 61 で、これは 2 進数で 0011 1101 です。各ビットが 1 に設定される条件は、2 つの入力数値の同じビットが異なることです。それらが同じである場合、 0に設定されます。
s3.png ビットごとの否定演算子~ は、オペランドの各ビットを否定します。
s4.png ビットごとに左シフトします。左シフト演算子 (<<) は、オペランドのすべてのビットを指定されたビット数だけ左にシフトします。

>>

s5.png ビット単位の右シフトです。右シフト演算子 (<<) は、オペランドのすべてのビットを指定されたビット数だけシフトします。
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 >>= 2 は C = C >> と同等です&=^=| = と同等です。 以下は、代入演算の簡単な例です。
演算子 説明
= 右オペランドを左オペランドに代入する単純な代入操作。 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
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 つの範囲演算子が用意されています。

演算子 閉区間演算子 half 開区間演算子

以下は間隔演算の簡単な例です:

import Cocoa

print("闭区间运算符:")
for index in 1...5 {
    print("\(index) * 5 = \(index * 5)")
}

print("半开区间运算符:")
for index in 1..<5 {
    print("\(index) * 5 = \(index * 5)")
}

上記のプログラムの実行結果は次のとおりです:

闭区间运算符:
1 * 5 = 5
2 * 5 = 10
3 * 5 = 15
4 * 5 = 20
5 * 5 = 25
半开区间运算符:
1 * 5 = 5
2 * 5 = 10
3 * 5 = 15
4 * 5 = 20

その他の演算子

Swift は、単項演算子、二項演算子、三項演算子など、他の種類の演算子を提供します。

  • 単項演算子は、単一のオペランド (-a など) を操作します。単項演算子は前置演算子と後置演算子に分けられます。前置演算子は操作オブジェクト (!b など) の直前に配置する必要があり、後置演算子は操作の直後に配置する必要があります。オブジェクト (!b など)。i++ など)。 -a)。一元运算符分前置运算符和后置运算符,前置运算符需紧跟在操作对象之前(如!b),后置运算符需紧跟在操作对象之后(如i++)。

  • 二元运算符操作两个操作对象(如2 + 3),是中置的,因为它们出现在两个操作对象之间。

  • 三元运算符操作三个操作对象,和 C 语言一样,Swift 只有一个三元运算符,就是三目运算符(a ? b : c

二項演算子は 2 つのオペランド (2 + 3 など) を操作し、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 です
演算子説明インスタンス1ドルマイナス数字の前に-プレフィックスを追加-3または-41ドルプラス + 記号プレフィックスを追加デジタルマネー+6 結果は6です三項演算子
三項演算子は 3 つのオペランドを操作します。C 言語と同様、Swift には三項演算子 (a ? b : c) が 1 つだけあります。
🎜条件? X : Y🎜🎜 trueとして追加された場合、値は次のようになります

以下は、単項演算、二項演算、および三項演算の簡単な例です:

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 と同等です

  • 論理演算の最終計算

​​&^?: = + = -= *= /= %= >>= <<= &= ^= |=, 以下オペレータ優先度の簡単な例:
import Cocoa

var A = 0

A = 2 + 3 * 4 % 5
print("A 的值为:\(A)")
上記プログラムの実行結果:
演算子の型 演算子は、方向
の式演算() [] . expr++ expr--左から右
単項演算子

* & + - ~ ++expr - を組み合わせます。 - expr

* / %

+ -

> <<

<<= >=

== !=

右から左へ演算 表記法

|

&&

||

左から右

三項演算子
右から左 代入演算子
右から左カンマ
左から右
A 的值为:4

分析例:

オペレータ優先度に従って、上記プログラムの動作は次のステップに分析できます。この式は次と同等です:

2 + ((3 * 4) % 5)
最初のステップは、以下を計算することです: (3 * 4) = 12 なので、式は次と同等です:

2 + (12 % 5)

2 番目のステップは、12 % 5 = 2 を計算することです。したがって、式は次と同等です:

2 + 2

この時点では、次のようになります。計算結果が 4 であることが簡単にわかります。