對C語言操作符的認識

2021-08-09 11:40:15 字數 4802 閱讀 2568

操作符可以分為以下幾類:

+  -  *  /    % 

1、除了%d操作符之外,其他幾個操作符可以用於整數和浮點數。

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

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

《左移操作符

移位規則:左邊拋棄,右邊補0

int num=10;

00000000 00000000 00000000 00001010 num在記憶體中的二進位制

00000000 00000000 00000000 00010100 num左移一位產生的結果

num<<1 但實際上num在沒有被賦值的情況下,自身的值不會變化

eg:int main()

結果為:a=1,b=2

用二進位制序列表示為:

a: 00000000 00000000 00000000 00000001

b: 00000000 00000000 00000000 00000010     

>>右移操作符

移位規則:

右移運算分兩種:

int num=-1;

假設num是-1;

這樣記憶體中儲存-1的補碼為32個全1

11111111 11111111 11111111 11111111

算數右移:左邊用原該值的符號位填充

11111111 11111111 11111111 11111111

由於是負數所以符號位為1,即左邊補1

邏輯右移:左邊補0

011111111 11111111 11111111 11111111

1、邏輯移位: 左邊用0填充,右邊丟棄

int num=10;

00000000 00000000 00000000 00001010 num在記憶體中的二進位制

00000000 00000000 00000000 00010100 num左移一位產生的結果

num<<1 但實際上num在沒有被賦值的情況下,自身的值不會變化

eg:int main()

結果為:a=2,b=1

用二進位制序列表示為:

a: 00000000 00000000 00000000 00000010

b: 00000000 00000000 00000000 00000001   

2、算術移位:左邊用原該值的符號位填充,右邊丟棄

eg:

int main()

結果為:a=-1;b-1;

警告 :對於移位運算子,不要移動負數字,這是標準為定義的。

eg:int  sum=10;

num>>-1;//error

&//按位與

| //按位或

^按位異或

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

eg:

int main()

結果為:a=-1;b-1;

一道**的面試題:不能建立臨時變數(第三個變數),實現兩個數的交換。

eg:

int main()

結果為:a=-1;b-1;

#includeint main()

賦值操作符是乙個很棒的操作符,他可以讓你得到乙個之前你不滿意的值。也就是可以給自己重新賦值。 i

nt weight=120;//體重

weight=89;//不滿意就賦值

double salary=10000.0;

salary=200000.0;//使用賦值操作符賦值。

賦值操作符可以連續使用,比如:

int a=10;

int x=20;

int y=20;

a=x=y+1;//連續賦值

但是:x=y+1;

a=x;

這樣的寫法更加清晰有條理,而且易於除錯。

復合賦值符:+=  -=  *=  /=  %=  >>=  <<=  &=  |=  ^=

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

eg:

int x=10;

x=x+10;

x+=10;//復合賦值

//這樣寫會使我們的**更加簡潔。

!                    //邏輯反操作

-                      //負值

+                    //正值

&                   //取位址               

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

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

--                  前置、後置--

++                前置、後置++

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

(型別)     強制型別轉換

int arr[10]=

printf("%d\n",sizeof(arr))://40 陣列名單獨放在sizeof內部,陣列名表示整個陣列

printf("%d\n",sizeof(arr+0))://4 arr+0:表示的是陣列首元素的位址

&陣列名——陣列名表示整個陣列 &arr+1=+40

放在sizeof內部的表示式不參與運算(sizeof求表示式在編譯期間,一般表示式在執行期間運算)

eg:int a=1;

short s=3;

sizeof(s=a+5);

結果為:a=1;s=3;

int a=0;

~a;結果為:a=-1

eg:

#includeint main()

eg:

#includeint main()

eg:

#includeint main()

)

eg:

int a=10;

a=(int)3.14

關係操作符

>    

>=

<

<= 

!=      (用於測試「不相等」)

==     (用於測試「相等」)

警告:在程式設計中==和=容易寫錯

邏輯操作符

&&       邏輯與

||          邏輯或 

區分邏輯與與按位與

區分邏輯或和按位或

1&2------->0

1&&2----->1

1|2--------->3

1||2-------->1

eg:

#includeint main()

exp1,exp2,exp3,..expn

逗號表示式,就是用逗號隔開的多個表示式。

逗號表示式從左向右依次執行。整個表示式的結果是最後乙個表示式的結果。

int a=1;

int b=2;

int c=(a>b,a=b+10,ab=a+1);//逗號表示式

c=2

1、[ ]

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

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

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

[ ]的運算元是arr和9

int main()

;arr[5]=5;=*(arr+5)=5;

2、()
函式呼叫操作符(函式名也是乙個操作符,是函式所在位址)
接受乙個或者多個運算元:第乙個運算元是函式名,剩餘運算元是傳遞給函式的引數。

3、訪問乙個結構的成員
結構體.成員名
->結構體指標-.成員名
#include

struct stu

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 對於 操作符如果兩個運算元都為整數,執行整數除法。而只要有浮點數執行的就是浮點數除法。...