[Objective-C基础]表达式(expression)实例详解
表达式 (expression) 由操作数 (operand) 与操作符 (operator) 所组成,依操作数的数量,表达式可以简单分为下列三种

绿色框框为单一个操作数,红色框框为两个操作数,蓝色框框为三个操作数。
单一操作数就构成一个表达式,操作数可以是变量 (variable) 、常数 (constant) 或传递信息 (message passing) ,例如
- a; // 以变量当操作数
- 3; // 以字面常数当操作数
- [s1 autorelease];; // 传递 autorelease 信息给 s1
表达式,顾名思义,其为运算出一个结果的式子,因此单一操作数的表达式所得到的结果就是操作数的值,如果是传递信息,也就是使用方法 (method) 后方法的传递值 (return value) 啰!
单一操作数也可以结合单元操作符,单元操作符有
| 操作符 | 功能 | 范例 |
|---|---|---|
| + | 正 | +a |
| - | 负 | -a |
| ++ | 递增 | ++a, a++ |
| -- | 递减 | --a, a-- |
| ! | 逻辑补数操作符 | ~a |
正负如果一般数学表示正负值一样,同样的,负负会得正
- int a = -3;
- int b = +a; // b 会等于 -3
- int c = -a; // c 会等于 3
递增、递减则是会将整数变量递增 1 或递减 1 ,有前后之别
- int a = 3;
- int b = ++a; // b 会等于 4
- int c = a++; // c 会等于 3
- int d = --a; // b 会等于 2
- int e = a--; // e 会等于 3
逻辑补数操作符会把 YES 变成 NO , NO 变成 YES
- BOOL a = YES;
- BOOL b = !a; // b 会等于 NO
- BOOL c = !b; // c 会等于 YES
一般操作符都须结合两个操作数,例如算术操作符 (arithmetic operator) ,可用在整数 (integer) 及浮点数 (floating-point number) ,计算结果也为整数或浮点数
| 运算符 | 功能 | 范例 |
|---|---|---|
| + | 加 | a + b |
| - | 减 | a - b |
| * | 乘 | a * b |
| / | 除 | a / b |
| % | 取余数 | a % b |
例如
- int a = 11;
- int b = a + 33; // b 会等于 44
- int c = b - 22; // c 会等于 22
- int d = c * 11; // d 会等于 242
- int e = d / 44; // e 会等于 5
- int f = e % 55; // f 会等于 5
相等性及关系操作符 (equality and relational operator) ,可用于整数及浮点数或布林值 (Boolean value) ,计算结果不是 YES 就是 NO
| 运算符 | 功能 | 范例 |
|---|---|---|
| == | 相等 | a == b |
| != | 不相等 | a != b |
| > | 大于 | a >= b |
| >= | 大于等于 | a >= b |
| < | 小于 | a < b |
| <= | 小于等于 | a <= b |
例如
- int a = 11;
- int b = 22;
- BOOL c = a >= b; // c 会等于 NO
- BOOL d = a <= b; // d 会等于 YES
- BOOL e = c == d; // e 会等于 NO
- BOOL f = a != b; // f 会等于 YES
我们运用的等号,其实属于指派操作符 (assignment operator) ,所谓的指派是把等号右边的值给左边的变量,如果右边是对象 (object) ,变量就必须声明为指针 (pointer)
| 运算符 | 功能 | 范例 |
|---|---|---|
| = | 指派 | a = b |
| += | 相加同时指派 | a += b |
| -= | 相减同时指派 | a -= b |
| *= | 相乘同时指派 | a *= b |
| /= | 相除同时指派 | a /= b |
| %= | 取余数同时指派 | a %= b |
例如
- int a = 11;
- a += 33; // a 会等于 44
- a -= 22; // a 会等于 22
- a *= 11; // a 会等于 242
- a /= 44; // a 会等于 5
- a %= 55; // a 会等于 5
有没有看的眼花撩乱?居然有 f = a != b 之类的式子出来,这是因为操作符有计算的优先次序 (precedence) ,由于 != 的优先顺序在 = 之前,所以 a != b 会先被计算,结果才会指派到 f 之中。如果不是很清楚各个操作符的优先次序,保险一点的做法可以用小括弧,先把要先被计算的表达式围起来,例如
- f = (a != b); // 等于 f = a != b
这是因为小括弧有最高的优先计算次序。
加上分号,表达式就是程序 (program) 中独立的陈述 (statement) 。 Objective-C 程序的执行单位为 main() 函数 (function) ,陈述则是执行单位,因为程序开始执行之后,便开始从 main() 中由前而后,一个陈述接着一个陈述来执行。
陈述也有好几种,最简单的陈述就是单一个分号
- ; // 什么事也不做的陈述
其他很多都是连带表达式单独一行的陈述,然而许多控制结构 (control structure) 是属于多行的复合陈述 (compound statement) .!
- 评论列表(网友评论仅供网友表达个人看法,并不表明本站同意其观点或证实其描述)
-
