上一章Swift教程请查看:swift元组,常量和字面量
操作符是一个符号,它告诉编译器执行特定的数学或逻辑操作,Objective-C有丰富的内建操作符,并提供了以下类型的操作符:
- 算术操作符
- 比较操作符
- 逻辑操作符
- 按位操作符
- 赋值操作符
- 范围内操作符
- 混合操作符
本教程将逐一解释算术、关系、逻辑、按位、赋值和其他操作符。
算术操作符
下表显示了Swift语言支持的所有算术操作符,假设变量A=10,变量B=20。
操作符 | 解释 | 例子 |
+ | 增加了两个操作数 | A + B是30 |
− | 从第一个操作数减去第二个操作数 | A – B等于-10 |
* | 增加两个操作数 | A * B是200 |
/ | 分子除以分母 | B / A给2 |
% | 模运算符和整数/浮点除法后的余数 | B % A等于0 |
比较操作符
下表显示了Swift语言支持的所有关系操作符,假设变量A=10,变量B=20。
操作符 | 解释 | 例子 |
== | 检查两个操作数的值是否相等;如果是,则条件为真。 | (A == B)不是真的。 |
!= | 检查两个操作数的值是否相等;如果值不相等,则条件为真。 | (A != B)是真的。 |
> | 检查左操作数的值是否大于右操作数的值;如果是,则条件为真。 | (A > B)不是真的。 |
< | 检查左操作数的值是否小于右操作数的值;如果是,则条件为真。 | (A < B)是真的。 |
>= | 检查左操作数的值是否大于或等于右操作数的值;如果是,则条件为真。 | (A >= B)不是真的。 |
<= | 检查左操作数的值是否小于或等于右操作数的值;如果是,则条件为真。 | (A <= B)为真。 |
逻辑操作符
下表显示了Swift语言支持的所有逻辑操作符,假设变量A为1,变量B为0,则为-
操作符 | 解释 | 例子 |
&& | 称为逻辑和运算符。如果两个操作数都非零,则条件为真。 |
(A && B)是假的。 |
|| | 称为逻辑或运算符。如果两个操作数中的任何一个非零,则条件为真。 | (A || B)为真。 |
! | 称为逻辑NOT操作符。用于反转其操作数的逻辑状态。如果条件为真,则逻辑NOT操作符将使其为假。 |
(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 |
假设 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
下表列出了支持Swift语言的位操作符,假设变量A有60,变量B有13,然后是7:
操作符 | 解释 | 例子 |
& | 如果结果在两个操作数中都存在,那么二进制和运算符将向结果中复制一位。 |
(A和B)给12,即0000 1100 |
| | 如果二进制或运算符存在于任何一个操作数中,则它将复制一位。 |
(A | B)将给出61,即0011 1101 |
^ | 如果二进制XOR操作符是在一个操作数中设置的,而不是同时在两个操作数中设置,则它将复制该位。 | (A ^ B)是49,也就是00110001 |
~ | 二进制补码操作符是一元的,具有“翻转”位的效果。 |
(~A)给出-61,它是2的补码形式1100 0011。 |
<< | 二进制左移位运算符。左操作数值由右操作数指定的位数向左移动。 |
(A << 2将给出240,即1111 0000 |
>> | 二进制右移位算子。左操作数值按右操作数指定的位数右移。 |
一个>> 2会得到15,也就是0000 1111 |
赋值操作符
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 >> 2相同 |
&= | 位和赋值运算符 |
C = 2和C = C + 2是一样的 |
^= | 位互斥或和赋值运算符 |
C ^ 2和C ^ 2是一样的 |
|= | 位包含OR和赋值运算符 |
C |= 2与C = C | 2相同 |
范围操作符
Swift包含两个范围操作符,它们是表示值范围的快捷方式,下表解释了这两个操作符。
操作符 | 解释 | 例子 |
封闭的范围 | (a…b)定义从a到b的范围,包括值a和b。 |
1……5是1 2 3 4 5 |
半开的范围 |
(一个. .< b)定义从a到b的范围,但不包括b。 |
1 . .< 5得到1 2 3 4 |
片面的范围 |
定义了从a到元素结束的范围 …a,定义了从起点到a的范围 |
1…给出1、2、3…元素的结束 …2表示开始直到1, 2 |
混合操作符
Swift支持包括range和?:具体见下表。
操作符 | 解释 | 例子 |
一元- | 数字值的符号可以使用前缀-来切换 | -3 或 -4 |
一元加 | 返回它操作的值,不做任何更改。 | +6 给出 6 |
三元条件 | 条件?X:Y | 如果条件为真?然后是值X:否则是值Y |
操作符优先级
操作符优先级决定了表达式中术语的分组,这将影响表达式的计算方式,某些操作符具有比其他操作符更高的优先级,例如,乘法操作符的优先级高于加法操作符。
例如,x = 7 + 3
* 2;这里,x被赋值为13,而不是20,因为操作符*的优先级高于+,所以它首先与3*2相乘,然后与7相加。
这里,优先级最高的操作符出现在表的顶部,优先级最低的操作符出现在底部。在表达式中,优先级更高的操作符将首先求值。
操作符 | 解释 | 例子 |
主要表达式操作符 |
() [] . expr++ expr– |
从左到右 |
一元操作符 |
* & + – ! ~ ++expr –expr * / % + – >> << < > <= >= == != |
从右到左 |
二元操作符 |
& ^ | && || |
从左到右 |
三元运算符 | ?: | 从右到左 |
赋值操作符 |
= += -= *= /= %= >>= <<= &=^= |= |
从右到左 |
逗号 | , | 从左到右 |