+ - * / %
1.除了%操作符以外,其他操作符可以作用於整數和浮點數。
2.對於/操作符如果兩個運算元都為整數,執行整數除法。而只要有浮點數執行的就是浮點數除法。
3.%操作符的兩個運算元必須為整數。返回的是整除之後的餘數。
<< 左移操作符
>> 右移操作符
左移操作符移位規則
左邊拋棄,右邊補0
num<<1 實際上num在沒被賦值的情況下,自身的值不會變化。
右移操作符移位規則
首先右移運算分為兩種:
1.邏輯移位 左邊用0填充,右邊丟棄
2.算術移位 左邊用原該值的符號位填充,右邊丟棄
3.對於移位操作符,不要移動負數字,這個是未定義的。
例如:
int num=10;
num>>-1;//error
位操作符有:
& //按位與
| //按位或
^ //按位異或
注:他們的運算元必須是整數。
int a=10;
int x=0;
int y=20;
a=x=y+1;//連續賦值
+=
-=*=
/=%=
>>=
<<=
&=|=
^=
這些運算子都可以寫成復合的效果。
比如:
int x=10;
x=x+10;
x+=10;//復合賦值
//這樣寫更加簡潔
! 邏輯反操作
- 負值
+ 正值
& 取位址
sizeof 運算元的型別長度(以位元組為單位)
~ 對乙個數的二進位制按位取反
-- 前置,後置--
++ 前置,後置++
* 間接訪問操作符(解引用操作符)
(型別) 強制型別轉換
>
>=
<
<=
!= 用於測試「不相等」
== 用於測試「相等」
我們要注意一些運算子使用時候的陷阱。
在程式設計的過程中==和=不小心寫錯,導致錯誤。
&& 邏輯與
|| 邏輯或
區分邏輯與和按位與區分邏輯或和按位或
1&2------>0
1&&2------>1
1|2------>3
1||2------>1
exp1?exp2:exp3
例如:if(a1.[ ] 下標引用操作符
運算元:乙個陣列名+乙個索引值
int arr[10];//建立陣列
arr[9]=10;//實用下標引用操作符。
[ ]的兩個運算元是arr和9。
2.()函式呼叫操作符 接受乙個或者多個運算元:第乙個運算元是函式名,剩餘的運算元就是傳遞給函式的引數。
#include void test1()
void test2()
int main()
3.訪問乙個結構的成員
.結構體.成員名 //成員變數使用
->結構體指標->成員名 //指標變數使用
表示式求值的順序一部分是由操作符的優先順序和結合性決定。
同樣,有些表示式的運算元在求值的過程中可能需要轉換為其他型別。
c的整型算術運算總是至少以預設整型型別的精度來進行的。
為了獲得這個精度,表示式中的字元和短整型運算元在使用之前被轉換為普通整型,這種轉換稱為整型提公升。
整型提公升的意義:
b和c的值被提公升為普通整型,然後再執行加法運算。
加法運算完成之後,結果將被截斷,然後再儲存於a中。
如何進行整體提公升呢?
整形提公升是 按照變數的資料型別的符號位來提公升的
//負數的整形提公升
char c1 = -1;
變數c1的二進位制位(補碼)中只有8個位元位:
111111
因為char 為有符號的char
所以整形提公升的時候,高位補充符號位,即為1提公升之後的結果是:
1111111111111111111111
//正數的整形提公升
char c2 = 1;
變數c2的二進位制位(補碼)中只有8個位元位:
00000001
因為char 為有符號的char
所以整形提公升的時候,高位補充符號位,即為0提公升之後的結果是:
0000000000000000000000001
//無符號整形提公升,高位補0
整形提公升的例子:
//例項1
int main()
突例1中的a,b要進行整形提公升,但是c不需要整形提公升a,b整形提公升之後,変成了負數,所以表示式a== 0xb6 , b0xb600的結果是假,但是c不發生整形提公升,則表示式c0xb600000的結果是真.
所以程式輸出的結果是: c
//例項2
int main()
突例2中的,c只要參與表示式運算,就會發生整形提公升,表示式+c ,就會發生提公升,所以sizeof(+c)是4個位元組.
表示式-c也會友生整形提公升,所以sizeof(-c)是4個位元組,但是sizeof( c ) ,就是1個位元組.
如果某個操作符的各個運算元屬於不同的型別,那麼除非其中乙個運算元的轉換為另乙個運算元的型別,否則操作就無法進行。下面的層次體系稱為尋常算術轉換。
long double
double
float
unsigned long int
long int
unsigned int
int
如果某個運算元的型別在上面這個列表中排名較低,那麼首先要轉換為另外-乙個運算元的型別後執行運算。但是算術轉換要合理,要不然會有一些潛在的問題。
float f = 3.14;
int num = f;//隱式轉換,會有精度丟失
C語言操作符總結
c語言操作符總結 1.算數操作符 有浮點數則為浮點除法 全為整形 2.移位操作符 所有的移位操作符都是二進位制移位 左移 效果 左邊拋棄右邊補0.右移 效果 1 符號位 算術移位 原該值的符號位 2 0 邏輯移位 警告 不要移動負數字 3.位操作符 按位與 按位或 按位異或 注意 全都為二進位制位操...
C語言 操作符總結
1.運算操作符 加 可作為正號 例 a b 4 減 可作為正號 例 a b 5 乘 例 a b 除 例 a b 注意 分母不能為零 取餘 運算操作符的使用方法,基本與數學上的使用一致 2.賦值操作符 例 a 2 可讀為將2賦給a 注意 從右向左進行運算 3.其他符賦值操作符 例 a 1 相當於 a ...
C語言操作符總結
1.操作符的兩個運算元必須為整數,返回的是整除後的餘數。2.對於 操作符,如果兩個運算元都是整數則執行整數除法,只要有浮點數就執行浮點數除法。左移操作符 右移操作符 左邊拋棄,右邊補0 右移分為兩種 1.邏輯移位 左邊用0補,右邊丟棄 2.算術移位 左邊用原來的符號位填充,右邊丟棄 符號位中0表示正...