03 運算子(C基礎)

2021-10-08 07:31:13 字數 1894 閱讀 1728

一、sizeof運算子

計算乙個資料型別的大小

ex: int a = 1;

sizeof(a)//結果就是4(不同的作業系統不一樣)

計算乙個陣列的個數

int arr = ;

int num = sizeof(arr)/sizeof(arr[0]); //結果是5

計算自定義資料型別的陣列大小,也是一樣的

ex: typedef struct

m_stu;

m_stu list = ,,};

printf("list size = %d\n",sizeof(list)/sizeof(list[0]));//結果是3

注意:sizeof裡面的運算都是不影響原值的

ex: int a = 1;

printf("sizeof(a++) = %d\n",sizeof(a++));

printf("a = %d\n",a);//結果還是1

二、&&和||

只要兩個表示式裡有乙個的結果是真用或(||)合併以後結果就是真

只要兩個表示式裡有乙個的結果是假用與(&&)合併以後結果就是假

與(&&)和或(||)都具有短路特徵如果前面表示式的結果可以決定合併後,表示式的結果就忽略後面的表示式

ex:int main()

結果是0 因為1為真 所謂後面的++a就不進行計算

三、&、|、^

1、可以利用按位與從乙個數字裡單獨獲得某些數字的內容

0010 1011 & 0000 0001 結果是1

2、可以利用按位與把乙個數字的某些數字內容設定成0

0110 1011 & 1101 1111 結果是0100 1011

3、利用按位與用來判斷乙個數字是奇偶數

if(num & 0x1)

printf("jishu\n");

else

printf("oushu\n");

按位或(|)可以把對應數字的內容做或計算,只要乙個數字的內容是1則或計算以後結果就是1

3 0000 0011

| 5 0000 0101

0000 0111

任何數字內容和0做按位或保持不變

任何數字內容和1做按位或結果是1

可以利用按位或把某些數字內容設定成1

0110 1011 | 0000 0100 結果是0110 1111

任何數字內容和0做按位異或結果保持不變

任何數字內容和1做按位異或結果變成相反數

(多個數進行按位異或的時候奇數個1結果為1,偶數個1為0)

ex: 1 ^ 0 ^ 1 ^ 0 ^ 0 ^ 1 這裡有三個1所以左後異或的結果是1

/*****************************************/

可以利用按位異或把某些數字內容變成相反數

0110 1001 ^ 0000 1111 結果是 0110 0110

四、三目運算子

1. 條件運算子的運算優先順序低於關係運算子和算術運算子,但高於賦值符。因此 max=(a>b)?a:b可以去掉括號而寫為 max=a>b?a:b

2. 條件運算子?和:是一對運算子,不能分開單獨使用。

3. 條件運算子的結合方向是自右至左。

例如:a>b?a:c>d?c:d應理解為

a>b?a:(c>d?c:d) 這也就是條件表示式巢狀的情形,即其中的表示式3又是乙個條

件表示式。

C 基礎 運算子

運算子用於執行程式 運算,會針對乙個以上運算元進行運算。是程式中的乙個重要組成部分,目前為止,任何一門語言都會有其運算子。我們在學習c 之前,已經接觸過vb了。vb中的運算子,大家現在是不是忘得差不多了呢?接下來這篇部落格將比較一下vb和c 中運算子的異同點。一 算數運算子 從圖中,我們不難看出vb...

C 基礎 運算子

常用的運算符合 空連線運算子算術運算子 一元運算子 int i 10 int j i int k j 結果 i 9 j 10 k 9 二元運算子 10 3 3 10 3 1 10 4 2 10 5 0 邏輯運算子 返回型別永遠是布林型別 一元運算子 取非 bool b true bool r b 結...

C 03 運算子過載

運算子過載的目的 讓物件的運算表現的和內建型別的運算一樣。運算子過載函式,返回值一般不會是void,例如 連續的 就無法用void實現,一般用類型別的引用,可以保證連續運算。class ccomplex 複數類 ccomplex ccomplex const ccomplex src mreal s...