初階C-操作符總結
C語言操作符是構成C語言表示式的工具,是說明特別操作的符號。
操作符的型別
算術操作符
+ - * / %
除了%操作符之外,其他均可以作用於整數和浮點數。
對於/操作符,如果是整數,執行整數除法,如果是浮點數,則執行浮點數除法
%操作符的兩個操作符必須是整數,返回的是整除之後的餘數。
移位操作符
<<左移操作符 >>右移操作符
左移位規則:左邊拋棄,右邊補0
右移位規則:這又分為兩種,分別是邏輯移位和算術移位
邏輯移位 是左邊用0填充,右邊丟棄
算術移位 是左邊用原該值的符號位填充,右邊丟棄
例如:求一個整數儲存在記憶體中的二進位制中1的個數
#include<stdio.h>
void erjinzhi(int num){
int count = 0;
while (num){
if (num % 2 == 1)
count++;
num = num / 2;
}
printf("二進位制中1的個數 = %d ", count);
return 0;
}
從這個程式裡中,我們就可以測出,每個數在二進位制中1的個數。但是我們,如果輸入負數,我們會發現,我們的程式,是有問題的。如果輸入了-10,那麼-10之前的所有0都要取反,這個時候我們將出來許多的1。
所以我們進行一個改正
#include<stdio>
void erjingzhi(int num){
int i = 0;
int count = 0;
for (i = 0; i < 32; i++){
if (((num >> i) & 1) == 1)
count++;
}
printf("二進位制中1的個數 = %d\n", count);
}
我們利用移位的方法去一個一個來計算。
這裡新增一個二進位制負數的轉化過程,可以更好的理解。
Ps:注意我們的移位不要移動負數位,這個是標準未定義的。
位操作符
位操作符有三種分別是:按位與,按位或,按位異或
& | ^
它們的運算元必須是整數。
按位與:對兩個數進行操作,然後返回一個新的數,這個數的每個位都需要兩個輸入數的同一位都為1時才為1.
按位或:比較兩個數,然後返回一個新的數,這個數的每一位設定1的條件是兩個輸入數的同一位都不為0。即任意一個為1,或者都為1。否則為0。
按位異或:比較兩個數,然後返回一個數,這個數的每個位設為1的條件是兩個輸入數的同一位不同,如果相同就設為0。即相同為0,不同為1。
賦值操作符
賦值操作符是一個很好用的操作符,你可以將你的變數設定成你需要的值。用 “=” 即可。
複合賦值操作符
+= | 加等 |
---|---|
-= | 減等 |
*= | 乘等 |
/= | 除等 |
%= | 取模等 |
>>= | 右移位等於 |
<<= | 左移位等於 |
&= | 按位與等於 |
|= | 按位或等於 |
^= | 按位取反等於 |
單目操作符
! | 邏輯反操作 |
---|---|
- | 取負數 |
+ | 取正數 |
& | 取地址 |
sizeof | 運算元的型別長度 |
~ | 對一個數的二進位制按位取反 |
– | 減減,類似累減 |
++ | 加加,類似累加 |
* | 間接訪問操作符 |
邏輯操作符
邏輯操作符有
&& 邏輯與
|| 邏輯或
它們與按位與和按位或之間的區別
1&2 ----->0
1&&2 ------->1
1|2 ------>3
1||2 ----->1
邏輯與還有邏輯或,此時是判斷它的真假性。要記住,非0為真。這是一個關鍵。
#include<stdio.h>
int main(){
int i= 0,a=0,b=2,c=3,d=4;
i= a++&&++b&&d++;
printf("a= %d\n b=%d\n c=%d\n d=%d\n",a,b,c,d);
return 0;
}
輸出後,abcd分別位1234。根據我們的猜測,這裡可能是為135這樣。但是這裡有個坑。
這裡存在一個短路求值的知識點。a=0這就代表了假。那麼 a+±----->0。也就是說在這裡是先返回,後++
短路求值:如果是&&左側表示式為假的時候,右側表示式不會求值
如果是||左側表示式為真的時候,右側表示式不會求值
條件操作符
exp1 ? exp2 : exp3
這是C語言中唯一的一個二目運算子,運算級非常低。
逗號表示式
exp1,exp2,exp3....expN
就是用逗號隔開的多個表示式。從左向右依次執行。
表示式求值
隱式型別轉換
C的整型算術運算總是至少以預設整型型別的精度來進行的。為了獲得這個精度,表示式中的字元和短整型運算元在使用之前被轉化為普通型別,這種轉換稱為——整形提升。
char a,b,c;
...
a = b + c;
b和c的值被提升為普通整型,然後再執行加法運算。
加法運算完成之後,結果將被截斷,然後再儲存於a中。
演算法運算中,a隱式轉換為int。
凡是針對char/short,此時都隱式轉換成int。
操作符的屬性
複雜表示式的求值有三個影響的因素:
1.操作符的優先順序
2.操作符的結合性
3.是否控制求值的順序
以上就是操作符的基本了,目前是我能知道並且掌握的,當以後有了其他的之後,再慢慢的新增進去。