運(yùn)算符

運(yùn)算符

運(yùn)算符分類
  • 按照功能分類
    • 算術(shù)運(yùn)算符
    • 關(guān)系運(yùn)算符和邏輯運(yùn)算符
    • 按位運(yùn)算符
  • 運(yùn)算符根據(jù)參與運(yùn)算的操作數(shù)的個(gè)數(shù)分為
    • 單目運(yùn)算
      • 單目運(yùn)算:只有一個(gè)操作數(shù)
    • 雙目運(yùn)算
      • 雙目運(yùn)算:兩個(gè)操作數(shù)
    • 三目運(yùn)算
      • 三目運(yùn)算:C語(yǔ)言中唯一的一個(gè),也稱為問好表達(dá)式
運(yùn)算符的優(yōu)先級(jí)以及結(jié)合性
  • C語(yǔ)言中,運(yùn)算符的運(yùn)算優(yōu)先級(jí)分為15級(jí),1級(jí)最高,15級(jí)最低,在表達(dá)式中,優(yōu)先級(jí)高的先于優(yōu)先級(jí)低的進(jìn)行運(yùn)算,而在一個(gè)運(yùn)算量?jī)蓚?cè)的運(yùn)算符,優(yōu)先級(jí)相同時(shí),則按照運(yùn)算符的結(jié)合性所規(guī)定的結(jié)合方向處理
優(yōu)先級(jí) 運(yùn)算符 名稱或含義 使用形式 結(jié)合方向 說(shuō)明
1 [] 數(shù)組下標(biāo) 數(shù)組名[常量表達(dá)式] 左到右
() 圓括號(hào) (表達(dá)式)/函數(shù)名(形參)
. 成員選擇(對(duì)象) 對(duì)象.成員
-> 成員選擇(指針) 對(duì)象指針->成員名
2 - 負(fù)號(hào)運(yùn)算符 -表達(dá)式 右到左 單目運(yùn)算符
(類型) 強(qiáng)制類型轉(zhuǎn)換 (數(shù)據(jù)類型)表達(dá)式
++ 自增運(yùn)算符 ++變量名/變量名++ 單目運(yùn)算符
-- 自減運(yùn)算符 --變量名/變量名-- 單目運(yùn)算符
* 取值運(yùn)算符 *指針變量 單目運(yùn)算符
& 取地址運(yùn)算符 &變量名 單目運(yùn)算符
! 邏輯非運(yùn)算符 !表達(dá)式 單目運(yùn)算符
~ 按位取反運(yùn)算符 ~表達(dá)式 單目運(yùn)算符
sizeof 長(zhǎng)度運(yùn)算符 sizeof(表達(dá)式) 單目運(yùn)算符
3 / 表達(dá)式/表達(dá)式 左到右 雙目運(yùn)算符
* 表達(dá)式*表達(dá)式 雙目運(yùn)算符
% 取余(取模) 整型表達(dá)式%整型表達(dá)式 雙目運(yùn)算符
4 + 表達(dá)式+表達(dá)式 左到右 雙目運(yùn)算符
- 表達(dá)式-表達(dá)式 雙目運(yùn)算符
5 << 左移 變量<<表達(dá)式 左到右 雙目運(yùn)算符
>> 右移 變量>>表達(dá)式 雙目運(yùn)算符
6 > 大于 表達(dá)式>表達(dá)式 左到右 雙目運(yùn)算符
>= 大于等于 表達(dá)式>=表達(dá)式 雙目運(yùn)算符
< 小于 表達(dá)式<表達(dá)式 雙目運(yùn)算符
<= 小于等于 表達(dá)式<=表達(dá)式 雙目運(yùn)算符
7 == 等于 表達(dá)式==表達(dá)式 左到右 雙目運(yùn)算符
!= 不等于 表達(dá)式!=表達(dá)式 左到右 雙目運(yùn)算符
8 & 按位與 表達(dá)式&表達(dá)式 左到右 雙目運(yùn)算符
9 ^ 按位異或 表達(dá)式^表達(dá)式 左到右 雙目運(yùn)算符
10 按位或 按位或 表達(dá)式 按位或 表達(dá)式 左到右 雙目運(yùn)算符
11 && 邏輯與 表達(dá)式&&表達(dá)式 左到右 雙目運(yùn)算符
12 邏輯或 表達(dá)式 表達(dá)式 左到右 雙目運(yùn)算符
13 ?: 條件運(yùn)算符 表達(dá)式1 ? 表達(dá)式2:表達(dá)式3 右到左 三目運(yùn)算符
14 = 賦值運(yùn)算符 變量=表達(dá)式 右到左
/= 除后賦值 變量/=表達(dá)式
*= 乘后賦值 變量*=表達(dá)式
%= 取模后賦值 變量$=表達(dá)式
+= 加后賦值 變量+=表達(dá)式
-= 減后賦值 變量-=表達(dá)式
<<= 左移后賦值 變量<<=表達(dá)式
>>= 右移后賦值 變量>>=表達(dá)式
&= 按位與后賦值 變量&=表達(dá)式
^= 按位異或后賦值 變量^=表達(dá)式
按位或后賦值 按位或后賦值 變量按位或后賦值表達(dá)式
15 , 逗號(hào)運(yùn)算符 表達(dá)式,表達(dá)式..... 左到右 從左向右順序運(yùn)算
- 注意:`按位或 ,邏輯或 , 按位或后賦值 = `
結(jié)合性
  • C語(yǔ)言中各種運(yùn)算符的結(jié)合性分為兩種,左結(jié)合性(自左至右)和右結(jié)合性(自右至左)
    • 算術(shù)運(yùn)算符的結(jié)合性是自左至右,即先左后右
    • 自右至左的結(jié)合方向稱為“右結(jié)合性”
算術(shù)運(yùn)算符
  • 算術(shù)運(yùn)算符有:加+ 減- 乘* 除/ 取余%

  • 整數(shù)除以整數(shù),求出來(lái)的結(jié)果依然是整數(shù)

  • 浮點(diǎn)型賦值給整型會(huì)損失小數(shù)部分

  • % 兩側(cè)必須都為整數(shù)

  • 利用%求出來(lái)的余數(shù)是正數(shù)還是負(fù)數(shù),由%左邊的被除數(shù)決定,被除數(shù)是正數(shù),余數(shù)就是正數(shù),反之則是負(fù)數(shù)

  • 結(jié)合性優(yōu)先級(jí)
    -* / % 優(yōu)先級(jí)大于 + -

    • 優(yōu)先級(jí)相同則左結(jié)合計(jì)算
  • 自動(dòng)類型提升

    • 算術(shù)運(yùn)算符規(guī)定:只有相同類型的數(shù)據(jù)才可以進(jìn)行運(yùn)算
    • 如果計(jì)算過程中,參與運(yùn)算的操作數(shù)不是同一類型,那么系統(tǒng)會(huì)自動(dòng)將小類型轉(zhuǎn)換為大類型,然后再進(jìn)行計(jì)算
  • 算術(shù)運(yùn)算的注意點(diǎn):

    • 自動(dòng)類型轉(zhuǎn)換:int a = 10.6;
    • 自動(dòng)將大類型轉(zhuǎn)換為小類型,會(huì)丟失精度,自動(dòng)類型提升 int b = 10.5 + 10;
    • 將右邊的1 提升為double類型,double b = 1.0 / 2 ;解決除法的精度問題
    • 強(qiáng)制類型轉(zhuǎn)換 double a = (double)1 / 2; 結(jié)果:a=0.500000; double b = (double)(1 / 2);結(jié)果:b=0.000000;
    • 如果取模運(yùn)算左邊小于右邊,那么結(jié)果就是左邊的數(shù)
    • 無(wú)論是隱式轉(zhuǎn)換還是顯式轉(zhuǎn)換,只要將一個(gè)大類型的數(shù)據(jù),轉(zhuǎn)換為小類型的數(shù)據(jù),那么就有可能丟失精度
類型轉(zhuǎn)換問題
  • 類型轉(zhuǎn)換分為

    • 隱式類型轉(zhuǎn)換
      • 不同類型數(shù)據(jù)混合運(yùn)算時(shí),升級(jí)成數(shù)據(jù)類型較大的類型
      • 賦值時(shí)右側(cè)表達(dá)式的值轉(zhuǎn)換成左側(cè)變量的類型
      • 所有浮點(diǎn)運(yùn)算都是以double類型進(jìn)行計(jì)算,即使表達(dá)式中都是float
      • 必定會(huì)發(fā)生的轉(zhuǎn)換
        • char、short -> int
        • float -> double
    • 顯式類型轉(zhuǎn)換
      • (類型關(guān)鍵字)(表達(dá)式)
      • (int)8.8 / 4: 8.8先轉(zhuǎn)換為8 然后再除以4,結(jié)果是2
  • 自動(dòng)轉(zhuǎn)換發(fā)生在不同數(shù)據(jù)類型的量混合運(yùn)算時(shí),由編譯器系統(tǒng)自動(dòng)完成

  • 自動(dòng)類型轉(zhuǎn)換遵循以下規(guī)則:

    • 相同的數(shù)據(jù)類型的值才能進(jìn)行運(yùn)算(比如加法運(yùn)算),而且運(yùn)算結(jié)果依然是同一種數(shù)據(jù)類型,系統(tǒng)會(huì)自動(dòng)對(duì)占用內(nèi)存較少的類型做一個(gè)自動(dòng)類型提升的操作
    • 若參與運(yùn)算量的類型不同,先轉(zhuǎn)換成同一類型,然后進(jìn)行運(yùn)算
    • 轉(zhuǎn)換按數(shù)據(jù)長(zhǎng)度增加的方向進(jìn)行,以保證精度不降低,如int類型和long類型運(yùn)算時(shí),先把int量轉(zhuǎn)換成long類型再進(jìn)行計(jì)算
    • 所有浮點(diǎn)型運(yùn)算都是以雙精度進(jìn)行的,即使僅含float單精度量運(yùn)算的表達(dá)式,也要先轉(zhuǎn)換成double類型再做運(yùn)算
    • char型和short型參與運(yùn)算時(shí),必須先轉(zhuǎn)換成int型
    • 在賦值運(yùn)算中,賦值號(hào)兩邊的數(shù)據(jù)類型不同時(shí),賦值號(hào)右邊的量將轉(zhuǎn)換為左邊的量,如果右邊的量的數(shù)據(jù)類型長(zhǎng)度比左邊長(zhǎng)時(shí),將丟失一部分?jǐn)?shù)據(jù),這樣會(huì)降低精度,丟失部分,按四舍五入
    • char/short -> int ->unsigned -> long -> double
  • 強(qiáng)制類型轉(zhuǎn)換:

    • 將大范圍的數(shù)據(jù)賦值給小范圍的變量時(shí),系統(tǒng)會(huì)自動(dòng)做一個(gè)強(qiáng)制類型轉(zhuǎn)換的操作,這樣容易丟失精度
    • 類型說(shuō)明符和表達(dá)式都必須加括號(hào)(單個(gè)變量可以不加括號(hào))
賦值運(yùn)算符
  • 簡(jiǎn)單賦值運(yùn)算符:=

  • 復(fù)合賦值運(yùn)算符:+=、-=、*=、/=、%=

  • 最簡(jiǎn)單的賦值運(yùn)算:將等號(hào)右邊的值賦值給等號(hào)左邊的變量

  • 復(fù)合賦值運(yùn)算符

    • /= 例如:a/=3; 相當(dāng)于a = a / 3;
    • *= 例如: a*=3; 相當(dāng)于a = a * 3;
    • %= 例如: a%=3; 相當(dāng)于a = a % 3;
    • += 例如: a+=3; 相當(dāng)于a = a + 3;
    • -= 例如: a-=3; 相當(dāng)于a = a - 3;
自增、自減
  • 前綴表達(dá)式:++x,--x:其中x表示變量名,先完成變量的自增自減1運(yùn)算,再用x的值作為表達(dá)式的值,即先變后用,也就是變量的值先變,然后再用變量的值參與運(yùn)算
  • 后綴表達(dá)式:x++,x--:先用x的值為表達(dá)式的值,然后變量自增自減1,即先用后變,也就是先用變量的值進(jìn)行運(yùn)算,然后變量自增自減變換
sizeof運(yùn)算符
  • sizeof可以用來(lái)計(jì)算一個(gè)變量或一個(gè)常量、一種數(shù)據(jù)類型所占用的內(nèi)存字節(jié)數(shù)

  • 格式:sizeof(變量/常量)

  • sizeof不是一個(gè)函數(shù),是一個(gè)運(yùn)算符

  • 計(jì)算常量所占用字節(jié)數(shù)

    • sizeof(10); 或者sizeof 10
  • 計(jì)算變量占用的字節(jié)數(shù)

double doubleValue = 10.9;
int number = sizeof(doubleValue);
// 也可以省略括號(hào)
int number = sizeof doubleValue;
  • 計(jì)算數(shù)據(jù)類型
    • sizeof計(jì)算數(shù)據(jù)類型,括號(hào)不能省略
int number = sizeof(char);
int number = sizeof(double);
逗號(hào)運(yùn)算符
  • 功能是將多個(gè)表達(dá)式連接起來(lái)組成一個(gè)表達(dá)式,稱為逗號(hào)表達(dá)式

    • 格式:表達(dá)式1,表達(dá)式2,.....表達(dá)式n;
  • 求值過程

    • 逗號(hào)表達(dá)式從左往右以此計(jì)算各個(gè)表達(dá)式的值
    • 整個(gè)逗號(hào)表達(dá)式的值是最后一個(gè)表達(dá)式的值
關(guān)系運(yùn)算符
  • c語(yǔ)言中,條件成立稱為真,條件不成立稱為假

  • 任何非0值都是真,只有0才是假

  • 關(guān)系運(yùn)算符有:> 、>= 、< 、<= 、== 、 !=

    • 關(guān)系運(yùn)算符的結(jié)果只有兩種,條件成立結(jié)果為真,條件不成立結(jié)果為假
  • 關(guān)系運(yùn)算符優(yōu)先級(jí):> < >= <= 優(yōu)先級(jí)大于== !=

  • 算術(shù)運(yùn)算符優(yōu)先級(jí)大于關(guān)系運(yùn)算符

邏輯運(yùn)算符
  • C語(yǔ)言提供了三種邏輯運(yùn)算符

    • && 與
    • || 或
    • ! 非
  • 邏輯與(&&)

    • 格式:表達(dá)式1 && 表達(dá)式2
    • 只有表達(dá)式1和表達(dá)式2都為真的時(shí)候才是真,只要有一個(gè)是假,那么結(jié)果就是假
    • 特點(diǎn):一假則假,如果表達(dá)式1是假,那么表達(dá)式2將不會(huì)計(jì)算
  • 邏輯或(||)

    • 格式:表達(dá)式1 || 表達(dá)式2
    • 只要有一個(gè)是真,那么結(jié)果是真,只有兩個(gè)表達(dá)式都為假時(shí),結(jié)果才是假
    • 特點(diǎn):一真則真,如果表達(dá)式1是真,那么表達(dá)式2將不會(huì)計(jì)算
  • 邏輯非 (!)

    • 格式:!表達(dá)式
    • 表達(dá)式是真,那么就是假,表達(dá)式是假,那么就是真
    • 結(jié)合性:從右至左
三目運(yùn)算符
  • 格式:條件表達(dá)式 ? 結(jié)果A : 結(jié)果B
  • 結(jié)合性:從左往右
  • 條件表達(dá)式為真,就返回結(jié)果A,否則返回結(jié)果B
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • C++運(yùn)算符重載-上篇 本章內(nèi)容:1. 運(yùn)算符重載的概述2. 重載算術(shù)運(yùn)算符3. 重載按位運(yùn)算符和二元邏輯運(yùn)算符4...
    Haley_2013閱讀 2,392評(píng)論 0 51
  • 謹(jǐn)記 當(dāng)你還在原地停留不動(dòng)時(shí),你的敵人已經(jīng)前進(jìn)一大步了;當(dāng)你還沉浸在成功的喜悅中,你的對(duì)手又更上一層樓了;當(dāng)你還在...
    長(zhǎng)風(fēng)留言閱讀 1,877評(píng)論 2 5
  • C++運(yùn)算符重載-下篇 本章內(nèi)容:1. 運(yùn)算符重載的概述2. 重載算術(shù)運(yùn)算符3. 重載按位運(yùn)算符和二元邏輯運(yùn)算符4...
    Haley_2013閱讀 1,551評(píng)論 0 49
  • 表達(dá)式和運(yùn)算符 程序中最簡(jiǎn)單的表達(dá)式就是,程序中的常量 變量名也是一種簡(jiǎn)單的表達(dá)式 復(fù)雜的表達(dá)式是由簡(jiǎn)單的表達(dá)式組...
    zhaolion閱讀 1,730評(píng)論 3 12
  • Method Swizzling原理每個(gè)類都維護(hù)一個(gè)方法(Method)列表,Method則包含SEL和其對(duì)應(yīng)IM...
    monk閱讀 303評(píng)論 0 0

友情鏈接更多精彩內(nèi)容