### 運算符和表達式
運算符可以分成如下幾種:?
?算術運算符, +, ―, *, /, %, ++, ――
?關系運算符, >, =, <=, ==, !=
?布爾邏輯運算符, ! , &&, ||?
?位運算符, &, | , ^, ~ , >>, <<
?賦值運算符, +=, ―=, *=, /=?
?條件運算符, ? :
### 短路與和短路或
布爾邏輯運算符中有兩個比較特殊的運算符號,?
“&&” 和“|| ” ,?
其中“&&” 為短路與,?
如果對兩個表達式進行計算, 若第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)乘法運算符
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
④ ③ ① ② ⑤
~~~