首页 > 代码库 > Objective-C之成魔之路【4-运算符和表达式】

Objective-C之成魔之路【4-运算符和表达式】

重开发者的劳动成果,请勿转载


运算符和表达式

运算符可以分成如下几种: 
?算术运算符, +, ―, *, /, %, ++, ――
?关系运算符, >, <, >=, <=, ==, !=
?布尔逻辑运算符, ! , &&, || 
?位运算符, &, | , ^, ~ , >>, <<
?赋值运算符, +=, ―=, *=, /= 
?条件运算符, ? :


短路与和短路或

布尔逻辑运算符中有两个比较特殊的运算符号, 
“&&” 和“|| ” , 
其中“&&” 为短路与, 
如果对两个表达式进行计算, 若第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 , 
则有如下结果;
它们的运行结果如下:



条件运算符

条件运算符的语法格式为: 
布尔表达式? 返回值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)乘法运算符 *
X*Y 求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
④ ③ ① ② ⑤

Objective-C之成魔之路【4-运算符和表达式】