C語言的運算符你瞭解嗎

前言

自學筆記,沒有歷史知識鋪墊(省略百度部分)C語言運算符的使用

一、算數運算符(數學運算) 

+ –

左右數據同一數據類型

* / %

註意

乘/除法在很多CPU中無法實現,或者需要多個CPU周期去實現嵌入式開發中,乘/除法可能需要第三方乘法庫才能實現乘/除法可能導致程序的移植性變差

%取模 場景:

獲取范圍數值時,如:int result=(x%100)+1; 則result值的范圍為[1.100]得到m進制的個位數,如8進制個位數: int a=x%8;介於取模的特性,可以用在循環數組結構中獲取下標,0,1,2,3,0,1,2,3,0,1,2…

二、邏輯運算符(判斷真假)

|| &&

邏輯或 邏輯與

> >= < <=

大於 大於等於 小於 小於等於

!

? : 三元運算符

三元運算符

三、位運算符(重點) 

<< 左移

運算場景:
左移1位,數據=數據2
m左移n位,m=m2ⁿ

>> 右移

運算場景:
右移1位,數據=數據/2
m右移n位,m=m/2ⁿ

註意:
signed和unsigned的右移動是不同的
signed修飾的變量的右移做while條件且變量為負數時,while會進入死循環(因為最高位=1,是符號位,永遠無法右移為0)

& | ^ ~ 與 或 異或 取反

& 與
bit中任意一位與0相&,該位都為0
場景:

屏蔽清零器 a=a | (~(0x1<<n))

int a=0x1234;
//屏蔽低8位
a=a& 0xff00;
int a=0x1234;
//清零器,清除bit第五位的高電平,轉為低電平,其他位不變
a=a & (~(0x1<<5));

| 或
bit中任意一位與1相|,該位都為1
場景:

保留/設置:設置高電平的方法,如設置指定位為高電平,其他位不變 a=a | (0x1<<n)

int a=3;
//使用左移可以更方便快速的讓第五位bit處於高電平,而且不影響其他位(嵌入式中bit最右邊通常讀作第0位)
a= a| (0x1<<5)

^ 異或
相同為0,不同為1
1.通常用於數據加密算法,AES SHA1等
2.數據交換(排序中的一種方法)

a=a^b;

b=a^b;
a=a^b;

~ 取反
按位取反

四、賦值運算符

= += -= &= …
賦值運算實際上是組合運算的縮寫,非原子性操作,volatile內存可見特性會失效(實際上執行瞭兩步,隻靠volatile無法解決)

五、內存訪問符號

 () 限制符/函數訪問符

1.限制符

(a+b)*c

1.函數訪問符

void fun();

[] 內存訪問ID符

內存訪問ID符(C語言中並不局限於數組的訪問,通過指針可以訪問整個內存空間)

a[0]
a[1]

{} 函數體限制符

函數體限制符

-> 地址訪問符 

.變量訪問符 

&取址符

&a;

*取值符

*a;

總結

本章主要為C語言運算符的使用

本篇文章就到這裡瞭,希望能給你帶來幫助,也希望您能夠多多關註WalkonNet的更多內容!

推薦閱讀: