運(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語言中唯一的一個(gè)预侯,也稱為問好表達(dá)式
運(yùn)算符的優(yōu)先級以及結(jié)合性
  • C語言中,運(yùn)算符的運(yùn)算優(yōu)先級分為15級妇菱,1級最高暴区,15級最低辛臊,在表達(dá)式中,優(yōu)先級高的先于優(yōu)先級低的進(jìn)行運(yùn)算伐割,而在一個(gè)運(yùn)算量兩側(cè)的運(yùn)算符刃唤,優(yōu)先級相同時(shí)尚胞,則按照運(yùn)算符的結(jié)合性所規(guī)定的結(jié)合方向處理
優(yōu)先級 運(yùn)算符 名稱或含義 使用形式 結(jié)合方向 說明
1 [] 數(shù)組下標(biāo) 數(shù)組名[常量表達(dá)式] 左到右
() 圓括號 (表達(dá)式)/函數(shù)名(形參)
. 成員選擇(對象) 對象.成員
-> 成員選擇(指針) 對象指針->成員名
2 - 負(fù)號運(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 長度運(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 , 逗號運(yùn)算符 表達(dá)式,表達(dá)式..... 左到右 從左向右順序運(yùn)算
- 注意:`按位或 法牲,邏輯或 , 按位或后賦值 = `
結(jié)合性
  • C語言中各種運(yùn)算符的結(jié)合性分為兩種淹办,左結(jié)合性(自左至右)和右結(jié)合性(自右至左)
    • 算術(shù)運(yùn)算符的結(jié)合性是自左至右恶复,即先左后右
    • 自右至左的結(jié)合方向稱為“右結(jié)合性”
算術(shù)運(yùn)算符
  • 算術(shù)運(yùn)算符有:加+ 減- 乘* 除/ 取余%

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

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

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

  • 利用%求出來的余數(shù)是正數(shù)還是負(fù)數(shù)副硅,由%左邊的被除數(shù)決定翅萤,被除數(shù)是正數(shù),余數(shù)就是正數(shù)培己,反之則是負(fù)數(shù)

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

    • 優(yōu)先級相同則左結(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ù)
    • 無論是隱式轉(zhuǎn)換還是顯式轉(zhuǎn)換囊陡,只要將一個(gè)大類型的數(shù)據(jù)撞反,轉(zhuǎn)換為小類型的數(shù)據(jù),那么就有可能丟失精度
類型轉(zhuǎn)換問題
  • 類型轉(zhuǎn)換分為

    • 隱式類型轉(zhuǎn)換
      • 不同類型數(shù)據(jù)混合運(yùn)算時(shí)嘹害,升級成數(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)對占用內(nèi)存較少的類型做一個(gè)自動(dòng)類型提升的操作
    • 若參與運(yùn)算量的類型不同云芦,先轉(zhuǎn)換成同一類型贸桶,然后進(jìn)行運(yùn)算
    • 轉(zhuǎn)換按數(shù)據(jù)長度增加的方向進(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)算中,賦值號兩邊的數(shù)據(jù)類型不同時(shí)想虎,賦值號右邊的量將轉(zhuǎn)換為左邊的量,如果右邊的量的數(shù)據(jù)類型長度比左邊長時(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)換的操作,這樣容易丟失精度
    • 類型說明符和表達(dá)式都必須加括號(單個(gè)變量可以不加括號)
賦值運(yùn)算符
  • 簡單賦值運(yùn)算符:=

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

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

  • 復(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可以用來計(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);
// 也可以省略括號
int number = sizeof doubleValue;
  • 計(jì)算數(shù)據(jù)類型
    • sizeof計(jì)算數(shù)據(jù)類型口锭,括號不能省略
int number = sizeof(char);
int number = sizeof(double);
逗號運(yùn)算符
  • 功能是將多個(gè)表達(dá)式連接起來組成一個(gè)表達(dá)式鹃操,稱為逗號表達(dá)式

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

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

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

  • 關(guān)系運(yùn)算符有:> 、>= 颁督、< 缚陷、<= 箫爷、== 、 !=

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

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

邏輯運(yùn)算符
  • C語言提供了三種邏輯運(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)容合作請聯(lián)系作者
  • 序言:七十年代末骚秦,一起剝皮案震驚了整個(gè)濱河市作箍,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌荧止,老刑警劉巖阶剑,帶你破解...
    沈念sama閱讀 222,252評論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件牧愁,死亡現(xiàn)場離奇詭異,居然都是意外死亡娘香,警方通過查閱死者的電腦和手機(jī)办龄,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,886評論 3 399
  • 文/潘曉璐 我一進(jìn)店門俐填,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人盏檐,你說我怎么就攤上這事驶悟。” “怎么了硫豆?”我有些...
    開封第一講書人閱讀 168,814評論 0 361
  • 文/不壞的土叔 我叫張陵熊响,是天一觀的道長诗赌。 經(jīng)常有香客問我,道長洪碳,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,869評論 1 299
  • 正文 為了忘掉前任非迹,我火速辦了婚禮,結(jié)果婚禮上冷离,老公的妹妹穿的比我還像新娘西剥。我一直安慰自己,他們只是感情好揪阿,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,888評論 6 398
  • 文/花漫 我一把揭開白布咆畏。 她就那樣靜靜地躺著旧找,像睡著了一般。 火紅的嫁衣襯著肌膚如雪鞭缭。 梳的紋絲不亂的頭發(fā)上魏颓,一...
    開封第一講書人閱讀 52,475評論 1 312
  • 那天甸饱,我揣著相機(jī)與錄音,去河邊找鬼搞动。 笑死渣刷,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的箩溃。 我是一名探鬼主播,決...
    沈念sama閱讀 41,010評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼歪架,長吁一口氣:“原來是場噩夢啊……” “哼和蚪!你這毒婦竟也來了烹棉?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,924評論 0 277
  • 序言:老撾萬榮一對情侶失蹤催束,失蹤者是張志新(化名)和其女友劉穎抠刺,沒想到半個(gè)月后摘昌,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,469評論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡买优,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,552評論 3 342
  • 正文 我和宋清朗相戀三年杀赢,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了湘纵。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片梧喷。...
    茶點(diǎn)故事閱讀 40,680評論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖汇歹,靈堂內(nèi)的尸體忽然破棺而出偿凭,到底是詐尸還是另有隱情弯囊,我是刑警寧澤胶果,帶...
    沈念sama閱讀 36,362評論 5 351
  • 正文 年R本政府宣布早抠,位于F島的核電站撬讽,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏咪奖。R本人自食惡果不足惜酱床,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,037評論 3 335
  • 文/蒙蒙 一扇谣、第九天 我趴在偏房一處隱蔽的房頂上張望闲昭。 院中可真熱鬧,春花似錦鸯绿、人聲如沸簸淀。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,519評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽男窟。三九已至贾富,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間汗捡,已是汗流浹背汇鞭。 一陣腳步聲響...
    開封第一講書人閱讀 33,621評論 1 274
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留淡溯,地道東北人簿训。 一個(gè)月前我還...
    沈念sama閱讀 49,099評論 3 378
  • 正文 我出身青樓强品,卻偏偏與公主長得像,于是被迫代替她去往敵國和親琼了。 傳聞我的和親對象是個(gè)殘疾皇子夫晌,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,691評論 2 361

推薦閱讀更多精彩內(nèi)容

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