c語言操作符

2021-08-17 10:17:48 字數 2748 閱讀 9142

1、算術操作

(1)除了了%操作符之外,其他的⼏幾個操作符可以作⽤用於整數和浮點數。

(2)對於/操作符如果兩個運算元都為整數,執⾏行行整數除法。而只要有浮點數執⾏的就是浮點數

(3)%操作符的兩個運算元必須為整數。返回的是整除之後的餘數。

2、移位操作符

移位操作符 a<<1;左移1位(對二進位制)

右移操作符a>>1;右移1位。

首先右移運算分兩種:

(1)邏輯移位

左邊用0填充,右邊丟棄

(2)算術移位

左邊用原該值的符號位填充,右邊丟棄

【注意:對於移位運算子,不不要移動負數字,這個是標準未定義的。】

3、暗位操作符

(1)int a = 10;int b = 20;int c = a&b;

c=0; 

二進位制   01010

10100

(2)負數,二進位制   原碼->反碼->補碼->與

&  // 按位與

|  // 按位或

^  // 按位異或

注:他們的運算元必須是整數。

例題:算乙個數儲存在二進位制序列中1的個數。

方法 1

#include

int main()

int num  = 10;   

int count=  0;// 計數   

while(num)   

if(num%2 == 1)           

count++;       

num = num/2;

printf("⼆二進位制中1的個數 = %d\n", count);   

return 0;

} // 思考這樣的實現⽅方式有沒有問題?

方法 2 :

#include

int main()

int num = -1;   

int i = 0;   

int count = 0;// 計數   

for(i=0; i<32; i++)   

if( ((num>>i)&1) == 1 )           

count++;       

printf("⼆二進位制中1的個數 =%d\n",count);   

return 0;

} // 思考還能不不能更更加優化,這⾥裡里必須迴圈 32 次的。

方法 3 :

#include

int main()

int num = -1;     

int i = 0;     

int count = 0;// 計數   

while(num)   

count++;       

num = num&(num-1);   

printf("⼆二進位制中1的個數 =%d\n",count);   

return 0;

} // 這種⽅方式是不不是很好?達到了了優化的效果,但是難以想到。

【注意:對於移位運算子,不不要移動負數字,這個是標準未定義的。】

例如:int num = 10; num>>-1;//error

4、賦值操作符

(1)例如:a=a+=10==a+=10

(2)復合賦值符

這些運算子都可以寫成復合的效果。

int x = 10;

x = x+10;

x+=10;// 復合賦值

// 其他運算子⼀一樣的道理理。這樣寫更更加簡潔。

5、單目操作符

!          邏輯反操作

-          負值

+          正值

&           取位址

int a = 0;

printf(「%p\n」,&a);//列印位址

printf(「%x\n」,&a);//列印十六進製制

sizeof     運算元的型別⻓長度(以位元組為單位)

~          對⼀乙個數的⼆二進位制按位取反

--         前置、後置

-++        前置、後置

++ *       間接訪問操作符(解引⽤用操作符)

(型別)       強制型別轉換

6、關係操作符

!=     ⽤用於測試「不不相等」

==     ⽤用於測試「相等」

7、邏輯操作符

&&          邏輯與

||          邏輯或

8、條件操作符

exp1 ? exp2 : exp3

9、逗號表示式

exp1, exp2, exp3, …expn

(1)      逗號表示式,就是⽤用逗號隔開的多個表示式。

(2)      逗號表示式,從左向右依次執⾏行行。整個表示式的結果是【最後⼀乙個表示式的結果。】

10、下標引⽤用、函式調⽤用和結構成員

(1)[ ]

運算元:⼀乙個陣列名 + ⼀乙個索引值

int arr[10];// 建立陣列   

arr[9] = 10;// 實⽤用下標引⽤用操作符。   

[ ]的兩個運算元是arr和9

(2)( ) 函式調⽤用操作符 接受⼀乙個或者多個運算元:第⼀乙個運算元是函式名,剩餘的運算元就是傳遞給函式的引數.

(3)訪問⼀乙個結構的成員

. 結構體.成員名

-> 結構體指標->成員名

c語言操作符 位操作符 移位操作符

1 按位操作符 1.1 按位 與 雙目運算子 僅當兩個運算元都為1時,結果為1,否則為0。參與運算的數以補碼方式出現。例 9 5 1 0000 1001 9的補碼 0000 0101 5的補碼 0000 0001 1的補碼 應用 a 通常將某些位清零或保留某些位。例如 將a的高八位清零,保留低八位,...

C語言 , 操作符

例如 define to string s s 將會使編譯器把以下命令 cout to string hello world endl 理解為cout hello world endl 例如 define concatenate x,y x y int xy 10 將會使編譯器把 cout conc...

C語言操作符

操作符的分類 1 算術操作符 2 移位操作符 3 位操作符 4 賦值操作符 5 單目操作符 6 關係操作符 7 邏輯操作符 8 條件操作符 9 逗號表示式 1 算術操作符 1 除了 操作符之外,不能用於浮點數。2 對於 操作符如果兩個運算元都為整數,執行整數除法。而只要有浮點數執行的就是浮點數除法。...