Swift 运算符
运算符是告诉编译器执行特定数学或逻辑操作的符号。Objective-C具有丰富的内置运算符,并提供以下类型的运算符-
- 算术运算符
- 比较运算符
- 逻辑运算符
- 按位运算符
- 赋值运算符
- 范围运算符
- 其他运算符
本教程将逐一解释算术、关系、逻辑、按位、赋值和其他运算符。
算术运算符
下表显示了Swift 4语言支持的所有算术运算符。假设变量 A 的值为10,变量 B 的值为20,则-
操作符 | 描述 | 示例 |
---|---|---|
+ |
相加两个操作数 | A + B 将得到30 |
− |
从第一个操作数减去第二个操作数 | A − B 将得到-10 |
* |
乘以两个操作数 | A * B 将得到200 |
/ |
分子除以分母 | B / A 将得到2 |
% |
取模操作符和整数/浮点数除法后的余数 | B % A 将得到0 |
比较运算符
下表显示了Swift 4语言支持的所有关系运算符。假设变量 A 为10,变量 B 为20,那么−
运算符 | 描述 | 示例 |
---|---|---|
== |
检查两个操作数的值是否相等;如果相等,则条件为真。 | (A == B) 不为真。 |
!= |
检查两个操作数的值是否不相等;如果不相等,则条件为真。 | (A != B) 为真。 |
> |
检查左操作数的值是否大于右操作数的值;如果是,则条件为真。 | (A > B) 不为真。 |
< |
检查左操作数的值是否小于右操作数的值;如果是,则条件为真。 | (A < B) 为真。 |
>= |
检查左操作数的值是否大于或等于右操作数的值;如果是,则条件为真。 | (A >= B) 不为真。 |
<= |
检查左操作数的值是否小于或等于右操作数的值;如果是,则条件为真。 | (A <= B) 为真。 |
逻辑运算符
下表显示了Swift 4语言支持的所有逻辑运算符。假设变量 A 的值为1,变量 B 的值为0,则结果为−
运算符 | 描述 | 示例 |
---|---|---|
&& |
逻辑与运算符。如果两个操作数都非零,则条件为真。 | (A && B) 为假。 |
|| |
逻辑或运算符。如果两个操作数中有任意一个非零,则条件为真。 | (A || B) 为真。 |
! |
逻辑非运算符。用于改变操作数的逻辑状态。如果条件为真,则逻辑非运算符将使其变为假。 | !(A && B) 为真。 |
位运算符
位运算符作用于位并进行逐位操作。&、|和^的真值表如下所示-
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 |
Assume A = 60; and B = 13;
In binary format, they will be as follows:
A = 0011 1100
B = 0000 1101
-----------------
A & B = 0000 1100
A|B = 0011 1101
A^B = 0011 0001
~A = 1100 0011
Swift 4语言支持的位操作符列在下表中。假设变量 A 持有60,变量 B 持有13,则7-
操作符 | 描述 | 示例 |
---|---|---|
& |
位与运算符,如果两个操作数中都存在该位,则结果中的该位为1,否则为0。 | (A & B) 将得到12,即0000 1100 |
| |
位或运算符,如果两个操作数中任意一个存在该位,则结果中的该位为1。 | (A | B) 将得到61,即0011 1101 |
^ |
位异或运算符,如果一个操作数中的某一位为1,而另一个操作数中的同一位为0,则结果中的该位为1,否则为0。 | (A ^ B) 将得到49,即0011 0001 |
~ |
取反运算符,对操作数的每一位取反。 | (~A) 将得到-61,即1100 0011(补码形式)。 |
<< |
左移运算符,将左操作数的值左移右操作数指定的位数。 | (A << 2) 将得到240,即1111 0000 |
>> |
右移运算符,将左操作数的值右移右操作数指定的位数。 | A >> 2 将得到15,即0000 1111 |
赋值运算符
Swift 4支持以下赋值运算符 –
运算符 | 描述 | 示例 |
---|---|---|
= |
简单赋值运算符,将右侧操作数的值赋给左侧操作数 | 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 >> 2 |
&= |
位与和赋值运算符 | C &= 2 等同于 C = C & 2 |
^= |
位异或和赋值运算符 | C ^= 2 等同于 C = C ^ 2 |
|= |
位或和赋值运算符 | C |= 2 等同于 C = C | 2 |
范围运算符
Swift 4包含两个范围运算符,用于快速表达一系列的值。以下表格解释了这两个运算符。
运算符 | 描述 | 示例 |
---|---|---|
闭合范围 | (a...b) 定义了从a到b的范围,包括a和b的值。 |
1...5 表示1、2、3、4和5 |
半开放范围 | (a..< b) 定义了从a到b的范围,但不包括b。 |
1..< 5 表示1、2、3和4 |
单边范围 | a… 定义了从a到元素末尾的范围 …a定义了从开头到a的范围 |
1… 表示1、2、3…元素末尾 …2 表示开头…到1、2 |
其他运算符
Swift 4支持一些其他重要的运算符,包括 范围 和? :,在下表中有解释。
运算符 | 描述 | 示例 |
---|---|---|
一元减号 | 使用前缀-可以切换数值的符号 | -3或-4 |
一元加号 | 返回操作数的原值,没有任何变化。 | +6得到6 |
三元条件运算符 | 条件 ? X : Y | 如果条件为真,则值为X,否则为Y |
运算符优先级
运算符优先级决定了表达式中项的分组方式。这会影响表达式的求值方式。某些运算符的优先级高于其他运算符;例如,乘法运算符的优先级高于加法运算符。
例如,x = 7 + 3 * 2
; 在这里,x被赋值为13,而不是20,因为乘法运算符的优先级高于加法运算符,所以它首先与3*2
相乘,然后再加上7。
在这里,优先级最高的运算符出现在表格的顶部,优先级最低的出现在底部。在表达式中,优先级高的运算符将先被求值。
运算符 | 描述 | 示例 |
---|---|---|
主表达式运算符 | () [] . expr++ expr-- |
从左到右 |
一元运算符 | * & \+ - ! ~ ++expr --expr * / % \+ - >> << < > <= >= == != |
从右到左 |
二元运算符 | & ^ | && || |
从左到右 |
三元运算符 | ?: |
从右到左 |
赋值运算符 | = += -= *= /= %= >>= <<= &=^= |= |
从右到左 |
逗号 | , |
从左到右 |