我們日常所見到的任何事物都是有個種各樣細小的零件所組成的,比如我們現在用的 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填充,右邊丟棄 算術移位 有符號 左邊用原該值的符號位填充,右...