1. 程式人生 > 其它 >輕鬆掌握操作符,常用操作符的應用分析

輕鬆掌握操作符,常用操作符的應用分析

技術標籤:C語言

這篇部落格主要是對C語言中的一些操作符進行講解和其應用的分析。

目錄

移位操作符

位操作符

邏輯操作符

逗號表示式

條件操作符

關於表示式求值的順序


移位操作符

移位操作符有2種:

左移操作符 <<

右移操作符 >>

提示:移位操作符,移的是二進位制位,即對補碼進行移動操作。

應用分析:

左移操作符的移動規則:

左邊拋棄,右邊補0

右移操作符的移動規則:

右移運算有2種,①邏輯移位 ②算術移位

①邏輯移位:右邊拋棄,左邊補0

②算術移位:右邊拋棄,左邊補符號位

位操作符

按位與 &

按位或 |

按位異或 ^

提示:位操作符的運算元必須是整數

,也是對補碼進行位運算的。

應用分析:

按位與 &

全1為1,有0則0。(2個數同時為1的位才為1,一旦有1個是0則是0)

按位或 |

有1為1,全0才為0。(2個數只要有1個是1則為1,同時為0才為0)

按位異或 ^

相同為0,相異為1.(2個數相同為0,不同為1)

例:求一個整數在記憶體中的二進位制中的1的個數

int main()
{
	int num = -1;
	int count = 0;
	int i = 0;
	for (i = 0;i < 32;i++)
	{
		if ((num >> i) & 1)
			count++;
	}
	printf("%d\n", count);
	return 0;
}

實際上這裡有種更簡單的方法,可以大大提高效率

(每次與自己-1進行按位與操作,這樣有幾個1就進行幾次運算)

​​int main()
{
	int num = -1;
	int count = 0;
	while (num)
	{
		num = num & (num - 1);
		count++;
	}
	printf("%d\n", count);
	return 0;
}

邏輯操作符

邏輯與 &&

邏輯或 ||

邏輯非 !

提示:邏輯操作符,只關注“真”和“假”。

應用分析:

我們先來看一道題

int main()
{
	
	int a = 0;
	int b = 1;
	int c = 2;
	int d = 3;
	int i = a++ && b++ && ++c && d++;
	printf("i=%d a=%d b=%d c=%d d=%d", i, a, b, c, d);
	return 0;
}

這道題的結果是:i = 0, a = 1, b = 1, c= 2, d = 3。

對於邏輯與這個操作符,只要前面有一個條件為假,那麼將不進行後面的運算。

對於邏輯或則是同理,只要前面有一個條件是真,那麼將不進行後面的運算。

逗號表示式

exp1, exp2, exp3, ...expN

提示:逗號表示式的結果,是最後一個表示式的結果。該表示式是從左向右依次執行。

應用分析:

int a = 1;

int b = 2;

int c = ( a = a+b, a++, a<b, b);

c的值是什麼?

c的值是 2,即c的值等於b,也就是該逗號表示式中的最後一個表示式的結果

條件操作符

exp1 ? exp2 : exp3

應用分析:

求2個數的較大值

int main()
{
	int a = 10;
	int b = 20;
	int Max = (a > b) ? (a) : (b);
	printf("%d\n", Max);
	return 0;
}

關於表示式求值的順序

1. 操作符的優先順序

2. 操作符的結合性

3. 操作符是否控制求值順序

(2個相鄰的操作符,先比較他們的優先順序高低,如果優先順序相同,那麼在比較他們的結合性)