1. 程式人生 > >初階C-操作符總結

初階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.是否控制求值的順序

以上就是操作符的基本了,目前是我能知道並且掌握的,當以後有了其他的之後,再慢慢的新增進去。