### 运算符和表达式
运算符可以分成如下几种:
•算术运算符, +, ―, *, /, %, ++, ――
•关系运算符, >, =, <=, ==, !=
•布尔逻辑运算符, ! , &&, ||
•位运算符, &, | , ^, ~ , >>, <<
•赋值运算符, +=, ―=, *=, /=
•条件运算符, ? :
### 短路与和短路或
布尔逻辑运算符中有两个比较特殊的运算符号,
“&&” 和“|| ” ,
其中“&&” 为短路与,
如果对两个表达式进行计算, 若第1 个表达式的值为“假” ,
则与第2个表达式的值无关, 结果肯定为“假” ,
所以此时第2个表达式不再计算。
“|| ” 为短路或, 如果对两个表达式进行计算, 若第1 个表达式的值为“真” ,
则与第2个表达式的值无关, 结果肯定为“真” ,
所以此时第2个表达式不再计算。
举例如下:
~~~
int i = 0;
int a = 10;
int b = 9;
if ((a > b) | (i++ == 1)) {
NSLog(@" a > b");
} else {
NSLog(@" a < b");
}
NSLog(@"i = %i", i);
结果是a > b和i =1
~~~
### 位运算符
位运算符有如下几个运算符: &, | , ^, ~ , >>,
其中&是按位与, | 是按位或, ^是异或, ~是取反, >>是右位移, <<是左位移。
位运算符举例:
假设有两个二进制数16位整数(short int) ,
a=1001110110011101 和b=0011100100111001 ,
则有如下结果;
它们的运行结果如下:
![](https://box.kancloud.cn/2015-12-31_5684a3f0324db.jpg)
### 条件运算符
条件运算符的语法格式为:
布尔表达式? 返回值1: 返回值2
当布尔表达式的值为真时, 返回表达式1 的值, 否则返回表达式2的值。
举例如下:
~~~
int i = 70;
int i3 =70
NSString *res = i3 > 60 ? @"及格" : @"不及格" ;
NSLog(@"res = i3 > 60 %@ ", res);
~~~
结果是“及格”
### 表达式
表达式,是由数字、算符、数字分组符号(括号)、自由变量和约束变量等
以能求得数值的有意义排列方法所得的组合。
约束变量在表达式中已被指定数值,而自由变量则可以在表达式之外另行指定数值。
### 表达式的意义
给与自由变量一些数值指定,可以给与一个表达式数值,
即使对于一些自由变量的值,表示式或许没有定义。
因此,一个表达式代表一个函数,其输入为自由变量的定值,而其输出则为表示式因之后所产生出的数值。
举例来说:
表达式x/y,分别使自由变量x和y定值为10和5,其输出为数字2;
但在y值为0时则没有定义。
一个表达式的赋值和算符的定义以及数值的定义域是有关联的。
两个表达式若被说是等值的,表示对于自由变量任意的定值,
两个表达式都会有相同的输出,即它们代表同一个函数。
一个表达式必须是合式的。亦即,其每个算符都必须有正确的输入数量,在正确的地方。
如表达式2+3便是合式的;而表达式*2+则不是合式的,至少不是算术的一般标记方式。
表达式和其赋值曾在20世纪30年代由阿隆佐·邱奇和Stephen Kleene在其λ演算中被公式化。
λ演算对现代数学和电脑编程语言的发展都曾有过重大的影响。
### 表达式的分类
1、算术表达式:
算术表达式是最常用的表达式,又称为数值表达式。
它是通过算术运算符来进行运算的数学公式。
算术运算符
1)乘法运算符
XY 求X乘Y的值 举例:6*7=42
2) 除法运算符 /
X/Y 求X除Y的值(浮点数运算) 举例:2.76/1.2=2.3
3)整除运算符 div
X div Y 求X除Y的整数商(对整型数计算) 举例:25=5
4)取余运算符 Mod
X mod Y 求X除Y的余数(对整型数运算) 举例:25 mod 4=1
5)加法运算符 +
X+Y 加法运算 举例:32+2=34
6)减法运算符 -
- X-Y 减法运算 举例:48-21=27
2、逻辑表达式
逻辑运算的结果只有两个:True(真)和False(假)。
OC提供了六种关系运算符和三种逻辑运算符:
==(等于)、(大于)、>=(大于等于)、!=(不等于)
!(非)、&&(与)、||(或)
表达式的运算优先顺序
在进行表达式的转换过程中,必须了解各种运算的优先顺序,
使转换后的表达式能满足数学公式的运算要求。
运算优先顺序为:
~~~
括号→函数→乘方→乘、除→加、减→字符连接运算符→关系运算符→逻辑运算符
~~~
如果同级的运算是按从左到右次序进行;多层括号由里向外。
例:
~~~
(10+6)*3^2*COS(1)/2*8+7
① ④ ③ ⑤ ② ⑥ ⑦ ⑧
Sqrt(Abs(p/n-1))+1
④ ③ ① ② ⑤
~~~