C語言操作符詳解

2021-08-29 23:24:12 字數 3971 閱讀 7792

我們日常所見到的任何事物都是有個種各樣細小的零件所組成的,比如我們現在用的 cpu 它的內部是由許許多多的二極體、三極體等基本元器件再加上連線各種元器件的導線所組成的。不同的組合方式也就形成了不同的功能,比如alu、控制器、暫存器、儲存器等等。當然我們的c語言也不例外,它也是由最基本的運算所組成的,而我們今天討論的操作符就是其中之一。

c語言的操作符由以下幾種型別:算術操作符、移位操作符、位操作符、賦值操作符、單目操作符、關係操作符、邏輯操作符、條件操作符、逗號表示式、下標引用、函式呼叫和結構成員等,下面我們來詳細討論一下這些操作符。

我們常見的算術運算子有以下幾個: 

+  -  *  /  %
除了%操作符以外,其他的操作符可以對整數和浮點數進 行運算

對於 /  和 * 操作符  如果兩個運算元數整數,則為整數除法 / 乘法;若有乙個是浮點數則為浮點數,則為浮點數除法 / 乘法

對於  % 操作符,兩個運算元必須都為整數,結果是整除後的餘數

移位操作符有兩個左移和右移

<<  左移

>> 右移

左移就是把乙個數的二進位制位整體向左移,規則:左邊拋棄,右邊補零   比如:

5 << 1  就是把5的二進位制形式向左移一位  

相當於 0000 1001 << 1 這最左邊為0被拋棄,然後在最右邊補0

最後的結果是 0000 1001 << 1 ==> 0001 0010

右移就是把乙個數的二進位制位整體向右移,但是由兩種情況:邏輯右移、算術右移

邏輯右移和左移是一樣的,只不過是反了過來,右邊拋棄,左邊補零,比如

5 >> 1     //5右移一位  相當於

0000 1001 >> 1 //右邊拋棄,左邊補零

0000 1001 >> 1 ==> 0000 0100

算術右移要考慮到符號位, 左邊補充符號位,右邊丟棄,這裡舉兩個例子:

1、正數

5 << 1 // 5右移1位

0000 1001 << 1 //二進位制形式

0000 1001 << 1 ==> 0000 0100 //右邊拋棄,左邊補符號位

這個其實是與邏輯右移一樣的,但是負數呢?

2、負數

-2 << 1 //-2 右移1位

1000 0010 //原碼

1111 1101 //反碼

1111 1110 //補碼(記憶體中儲存的形式)

1111 1110 >> 1 //對-2右移就是對他的補碼右移

1111 1110 >> 1 ==> 1111 1111 //右邊拋棄,左邊補符號位

但是對於乙個數,如何判斷他是邏輯右移還是算術左移呢?

這個和運算元的型別有關,如果運算元是無符號的那就是邏輯右移,如果是有符號的那就是算術右移

位操作符有三個分別是:

&    //按位與    全1為1,否則為0

| //按位或 全0為0,否則為1

^ //按位異或 不同為1,相同為0

注:這三個操作符的兩個運算元必須為整數

賦值操作符為 = ,但是它可以與其他操作符簡寫,以下是常用的幾種:

=     //最基本的賦值操作符     例 a = b

+= //加等 例: a += b ==> a = a + b

-= //減等 例: a -= b ==> a = a - b

%= //模等 例: a %= b ==> a = a % b

*= //乘等 例: a *= b ==> a = a * b

/= //除等 例: a /= b ==> a = a / b

還有一些其他的,不一一舉例,可與以上模擬

<<= >>= &= ^= |=

!    邏輯反操作

- 負值

+ 正值

& 取位址

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

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

-- 前置、後置--

++ 前置、後置++

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

(型別) 強制型別轉換

注:sizeof    不是乙個函式,而是乙個操作符

對於前置++/--和後置++/--的理解:

前置 ++/--  : 先對值 ++/-- 然後在使用這個值

後置 ++/--  :先使用值,使用完之後再對其進行  ++/--

int i = 1;

a = ++i ; //前置++,先加後用 所以現在 a = 2; i = 2

a = i++ ; //後置++,先用後加 用了之後 a = 2; 然後i再加1 , i = 3

a = --i ; //前置--,先減後用 減了後 i = 2 , 然後a = 2

a = i-- ; //後置++,先用再減 用了後 a = 2 , 然後i再減1 , i = 1

用於兩個數的比較,常用的有:

>     大於

>= 大於等於

< 小於

<= 小於等於

!= 用於測試「不相等」

== 用於測試「相等」

注意:== 和 = 是兩個不同的操作符,其表達的含義完全不一樣,請初學者高度重視

常用於多個條件之間的關係判斷:

&&    邏輯與    // 0為假  非零為真

|| 邏輯或

應該嚴格區分邏輯與/或和按位與/或的區別,舉個例子:

1 & 2 ==> 0    按位與

1 && 2 ==> 1 邏輯與

按位與是把兩個運算元的每一位相與

邏輯與是把兩個運算元進行真假判斷

注意:邏輯操作符有乙個重要的特性        

邏輯與:當現在的條件已經為假,則後續條件不需要判斷

邏輯或:當現在的條件已經為真,則後續條件不需要判斷

條件操作符也稱為三目操作符

exp1 ? exp2 : exp3    

若條件exp1成立,返回exp2的值,否則返回exp3的值

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

exp1,exp2,exp3,...,expn
表示式以此執行,但是結果是最後乙個表示式的結果

1、[ ] 下標引用運算元

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

array[10];    //訪問下標為10的元素,也就是陣列中的第11個元素
2、( ) 函式呼叫操作符 接受乙個或者多個運算元:第乙個運算元是函式名,剩餘的運算元就是傳遞給函式的引數

void add(int x, int y)

int main()

3、訪問乙個結構體的成員

1、結構體 . 成員名

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

typedef struct stustu_d;

void changeage(struct stu_t student)

int main();

changeage(zhangsan);

printf("%d\n",zhangsan.age); //以結構體.成員名訪問

}

好了,以上就是c語言的一些常用的操作符,我們詳細的討論了每一種操作符的用法,希望對大家有所幫助。

@yeling0119

C語言操作符詳解

操作符的存在使c語言更加的靈活,實現更多的功能。但是,操作符的一些繁瑣的使用方式,規則卻常常讓我們這些初學者頭疼。本文將操作符進行總結,彙總一起分享。一,操作符的分類 操作符分為以下幾種 算術操作符,位操作符,賦值操作符,單目操作符,關係操作符,邏輯操作符,條件操作符,逗號操作符,下標引用,函式呼叫...

c語言操作符詳解

一 算術操作符 算術操作符共有5個,分別為加法操作符 減法操作符 乘法操作符 除法操作符 和求餘操作符 它們均為雙目操作符,即操作符前後都需要乙個運算元。printf sum d a b printf diff d a b printf mul d a b printf rate d distanc...

C語言操作符詳解

算數操作符 算術運算子用在數學表示式中,它們的作用和在數學中的作用一樣。注意 只能用於整型 移位操作符 右移操作符 左移操作符 左移操作符 移位規則 左邊拋棄 右邊補0。右移操作符 移位規則 首先右移運算分兩種 邏輯移位 無符號 左邊用0填充,右邊丟棄 算術移位 有符號 左邊用原該值的符號位填充,右...