首頁 > 軟體

C語言各種操作符透徹理解上篇

2022-02-09 13:01:51

前言:在我們程式編寫領域,操作符給我們提供了很多的運算便利,但操作符琳琅滿目,我們要怎樣用好它們呢,下面就帶你來熟悉熟悉這些多樣的操作符。

操作符分類:

算術操作符 、移位元運算符 、位元運算符 、賦值操作符 、單目操作符 、關係操作符 、邏輯操作符 、條件操作符 、逗號表示式 、下標參照、函數呼叫和結構成員

1.算數操作符(+、--、*、%、/)

這裡我們著重講一下取餘(模)%操作符和除法/操作符

#include<stdio.h>
int main()
{
	//取餘(模)、除法
	int ret1 = 10 % 3;//取餘(模),得到的結果是相除之後的餘數
	int ret2 = 10 / 3;//除法-得到的結果是商
 
	printf("ret1=%dnret2=%dn", ret1, ret2);
 
	//當/(除號)兩端都是整數的時候,執行的是整數除法
	//當兩端只要有一個浮點數,執行的就是浮點數的除法
	double ret = 10.0 / 3;
	printf("%lfn", ret);
 
	return 0;
}

2.移位元運算符(左移<< 和 右移>>)

這裡注意!!!

移位元運算符的運算元只能是整數,整數在記憶體中存的是二補數,但最後輸出的,也就是我們看到的,是原碼。

(1)左移

#include<stdio.h>
int main()
{
	//2.移位元運算符
	//左移
	int a = 5;
	//把a在記憶體中儲存的二進位制位向左移動2位
	int b = a << 2;
 
	printf("%dn", b);
	printf("%dn", a);
}

 計算演示:

(2)右移

分為算數右移和邏輯右移,具體是哪種右移取決於編譯器。

算數右移:右邊丟棄,左邊補原來的符號位(負數右移幾位左邊就添幾個1)

邏輯右移:右邊丟棄,左邊補0

(常見的編譯器都是算數右移)

#include<stdio.h>
int main()
{
	int a = 5;
	int b = a >> 2;
	printf("%dn", b);
    return 0;
}

3.位元運算符

我們直接上程式碼

#include<stdio.h>
int main()
{
    int a = 3;
	int b = -5;
	int x = a & b;
	int y = a | b;
	int z = a ^ b;
	printf("%d %d %d", x, y, z);
 
	return 0;
}

(1)按位元與&

相同為1,不同為0

(2)按位元或

只要有1則為1,兩個同時為0才為0

(來個例題)

不能建立臨時變數(第三個變數),實現兩個數的交換

第一種,採用算數操作符來解決

#include<stdio.h>
int main()
{
	int a = 3, b = 5;
	printf("交換前:a=%d b=%dn", a, b);
	a = a + b;//a+b=8
	b = a - b;//此時的a=8,b還是5,則b=8-5=3,也就是之前的a
	a = a - b;//次時的a還是8,而b已經賦值為3,所以這時的a=8-3=5,也就是之前的b
	printf("交換後:a=%d b=%dn", a, b);
 
	return 0;
}

 但是這種方法不夠完美,當a很大,b也很大的時候,則放不進整型裡面,存在溢位問題,不能解決所有問題。那麼我們就來看下第二種方法:使用互斥或

(相同的互斥或為0,任何數與0互斥或還是原的數)

#include<stdio.h>
int main()
{
	int a = 3, b = 5;
	printf("交換前:a=%d b=%dn", a, b);
	a = a ^ b;
	b = a ^ b;//相當於a^b^b=a
	a = a ^ b;//相當於a^b^a(此時的b=a)=b
	printf("交換後:a=%d b=%dn", a, b);
 
	return 0;
}

 但是這個方法的可讀性不高,也存在缺陷,如果你有更好的方法記得告訴博主哦!

4.賦值操作符

(1)=,沒什麼好講的

這裡要提一點,連續賦值(不提倡),但要注意的是等號兩邊不能同時為常數

(2)複合賦值符

+= :a=a+b可以寫成a+=b

 -= :a=a-b可以寫成a-=b

*= :a=a*b可以寫成a*=b

下面以此類推

/= 、%= 、>>= 、<<= 、&= 、|= 、^=

好啦,操作符詳解的上篇今天就到這了,敬請期待下篇!!!

到此這篇關於C語言各種操作符透徹理解上篇的文章就介紹到這了,更多相關C語言 操作符內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com