C語(yǔ)言運(yùn)算符和表達(dá)式(二)

謹(jǐn)記

當(dāng)你還在原地停留不動(dòng)時(shí)扛芽,你的敵人已經(jīng)前進(jìn)一大步了骂蓖;當(dāng)你還沉浸在成功的喜悅中,你的對(duì)手又更上一層樓了川尖;當(dāng)你還在失落無(wú)助的時(shí)候登下,你的敵人已經(jīng)站起來(lái)繼續(xù)向前走了;人生苦短叮喳,你需要不斷的前行被芳,不斷的奮斗,如果哪天你真的走不動(dòng)了嘲更,希望你自己不要后悔筐钟,遠(yuǎn)方的你還在看著現(xiàn)在的你。

本篇文章繼續(xù)抒寫(xiě)上篇文章未寫(xiě)完的知識(shí)點(diǎn)赋朦,本篇文章講介紹賦值運(yùn)算符和表達(dá)式篓冲、sizeof()、逗號(hào)運(yùn)算符和表達(dá)式宠哄、條件運(yùn)算符(三目運(yùn)算)壹将。

賦值運(yùn)算符和表達(dá)式

1、賦值運(yùn)算符
(1)單純賦值運(yùn)算符“=”
在前面的講解中毛嫉,讀者已多次看到了符號(hào)“=”诽俯。在C語(yǔ)言中,“=”不是等號(hào)承粤,而是賦值運(yùn)算符暴区,它是個(gè)雙目運(yùn)算符,結(jié)合性是從右向左辛臊,其作用是將賦值號(hào)“=”右邊的操作數(shù)賦給左邊的操作數(shù)仙粱。
例如: x = 20; y = 30;
(2)復(fù)合賦值運(yùn)算符“+=”、“?=”彻舰、“*=”伐割、“/=”
在賦值符“=”之前加上其他運(yùn)算符候味,即構(gòu)成復(fù)合的運(yùn)算符。C語(yǔ)言規(guī)定有10種復(fù)合賦值運(yùn)算符隔心,“%=”白群、“<<=”、“>>=”硬霍、“&=”帜慢、“^=”和“|=”,這些將在后面位運(yùn)算中介紹唯卖。如圖表1-1崖堤。

2、賦值表達(dá)式
用賦值運(yùn)算符將一個(gè)變量和一個(gè)表達(dá)式連接起來(lái)耐床,就成了賦值表達(dá)式密幔。一般形式如下:
<變量名><賦值運(yùn)算符><表達(dá)式> 即:變量 = 表達(dá)式
對(duì)賦值表達(dá)式求解的過(guò)程是,將賦值運(yùn)算符右側(cè)的“表達(dá)式”的值賦給左側(cè)的變量撩轰。賦值表達(dá)式的值就是被賦值的變量的值胯甩,如“a = 10”這個(gè)賦值表達(dá)式的值是10。

    3堪嫂、特殊的賦值運(yùn)算——自增自減運(yùn)算符
    “++”是自增運(yùn)算符偎箫,它的作用是使變量的值增加1〗源“??”是自減運(yùn)算符淹办,其作用是使變量的值減少1,例如:
    i = i+1
    這個(gè)賦值表達(dá)式是把變量i的值加上1后再賦給i恶复,即將變量i的值增加1怜森。那么在這里就可以利用自增運(yùn)算符簡(jiǎn)化這個(gè)賦值表達(dá)式為
    i++ 或 ++i

這里有兩點(diǎn)需要注意。

① 自增/自減運(yùn)算符僅用于變量谤牡,不能用于常量或表達(dá)式副硅。
② 自增和自減的結(jié)合方向是自右至左。
自增和自減運(yùn)算符可用在操作數(shù)之前翅萤,也可放在其后恐疲,但在表達(dá)式中這兩種用法是有區(qū)別的。自增或自減運(yùn)算符在操作數(shù)之前套么,C語(yǔ)言在引用操作數(shù)之前就先執(zhí)行加1或減1操作培己;運(yùn)算符在操作數(shù)之后,C語(yǔ)言就先引用操作數(shù)的值胚泌,而后再進(jìn)行加1或減1操作省咨。

例如:
j=i++;
其執(zhí)行過(guò)程是:先將變量i的值賦值給變量j诸迟,再使變量i的值增1茸炒。結(jié)果是i的值為3,j的值為2阵苇。等價(jià)于下面兩個(gè)語(yǔ)句:
j=i;
i=i+1;
再看以下示例:
j=++i;
其執(zhí)行過(guò)程是壁公,先將變量i的值增1,再把新i的值賦給變量j绅项。結(jié)果是i=3紊册,j=3。
該語(yǔ)句等價(jià)于下面兩個(gè)語(yǔ)句:
i = i+1;
j=i快耿;

3囊陡、賦值運(yùn)算符中類(lèi)型的轉(zhuǎn)換
前面已經(jīng)介紹了類(lèi)型轉(zhuǎn)換,當(dāng)賦值運(yùn)算符兩邊的運(yùn)算對(duì)象類(lèi)型不同時(shí)掀亥,將要發(fā)生類(lèi)型轉(zhuǎn)換撞反,轉(zhuǎn)換的規(guī)則是:把賦值運(yùn)算符右側(cè)表達(dá)式的類(lèi)型轉(zhuǎn)換為左側(cè)變量的類(lèi)型。具體的轉(zhuǎn)換如下:
(1)浮點(diǎn)型與整型
將浮點(diǎn)數(shù)(單雙精度)轉(zhuǎn)換為整數(shù)時(shí)搪花,將舍棄浮點(diǎn)數(shù)的小數(shù)部分遏片,只保留整數(shù)部分。將整型值賦給浮點(diǎn)型變量撮竿,數(shù)值不變吮便,只是改為浮點(diǎn)形式, 即小數(shù)點(diǎn)后帶若干個(gè)0幢踏。注意:賦值時(shí)的類(lèi)型轉(zhuǎn)換實(shí)際上是強(qiáng)制的髓需。
(2)單、雙精度浮點(diǎn)型
由于C語(yǔ)言中的浮點(diǎn)數(shù)總是用雙精度表示的房蝉,所以float 型數(shù)據(jù)只是在尾部加0延長(zhǎng)為double型數(shù)據(jù)參加運(yùn)算僚匆,然后直接賦值。double型數(shù)據(jù)轉(zhuǎn)換為float型時(shí)搭幻,通過(guò)截尾數(shù)來(lái)實(shí)現(xiàn)白热,截?cái)嗲耙M(jìn)行四舍五入操作。
(3)char型與int型
int型數(shù)值賦給char型變量時(shí)粗卜,只保留其最低8位屋确,高位部分舍棄。
char型數(shù)值賦給int型變量時(shí)续扔,一些編譯程序不管其值大小都作正數(shù)處理攻臀,而另一些編譯程序在轉(zhuǎn)換時(shí),若char型數(shù)據(jù)值大于127纱昧,就作為負(fù)數(shù)處理刨啸。對(duì)于使用者來(lái)講,如果原來(lái)char型數(shù)據(jù)取正值识脆,轉(zhuǎn)換后仍為正值设联;如果原來(lái)char型值可正可負(fù)善已,則轉(zhuǎn)換后也仍然保持原值,只是數(shù)據(jù)的內(nèi)部表示形式有所不同离例。
(4)int型與long型
long型數(shù)據(jù)賦給int型變量時(shí)换团,將低16位值送給int型變量,而將高16 位截?cái)嗌釛墶?這里假定int型占兩個(gè)字節(jié))宫蛆。 將int型數(shù)據(jù)送給long型變量時(shí)艘包,其外部值保持不變,而內(nèi)部形式有所改變耀盗。
(5)無(wú)符號(hào)整數(shù)
將一個(gè)unsigned型數(shù)據(jù)賦給一個(gè)占據(jù)同樣長(zhǎng)度存儲(chǔ)單元的整型變量時(shí)(如:unsigned→int想虎、unsigned long→long,unsigned short→short) 叛拷,原值照賦舌厨,內(nèi)部的存儲(chǔ)方式不變,但外部值卻可能改變忿薇。
將一個(gè)非unsigned整型數(shù)據(jù)賦給長(zhǎng)度相同的unsigned型變量時(shí)邓线,內(nèi)部存儲(chǔ)形式不變,但外部表示時(shí)總是無(wú)符號(hào)的煌恢。

逗號(hào)運(yùn)算符和表達(dá)式

C語(yǔ)言中逗號(hào)“骇陈,”也是一種運(yùn)算符,稱(chēng)為逗號(hào)運(yùn)算符瑰抵。其功能是把兩個(gè)表達(dá)式連接起來(lái)組成一個(gè)表達(dá)式你雌,其一般形式如下。
表達(dá)式1二汛,表達(dá)式2
其求值過(guò)程是分別求兩個(gè)表達(dá)式的值婿崭,并以表達(dá)式2的值作為整個(gè)逗號(hào)表達(dá)式的值。

對(duì)于逗號(hào)運(yùn)算符需要說(shuō)明3點(diǎn):
① 逗號(hào)表達(dá)式一般形式中的表達(dá)式1和表達(dá)式2也可以是逗號(hào)表達(dá)式肴颊。例如“表達(dá)式1氓栈,(表達(dá)式2,表達(dá)式3)”婿着。這樣就形成了嵌套情形授瘦。
因此可以把逗號(hào)表達(dá)式擴(kuò)展為以下形式“表達(dá)式1,表達(dá)式2竟宋,……提完,表達(dá)式n”,整個(gè)逗號(hào)表達(dá)式的值等于表達(dá)式n的值丘侠。
② 程序中使用逗號(hào)表達(dá)式徒欣,通常是要分別求逗號(hào)表達(dá)式內(nèi)各表達(dá)式的值,并不一定要求整個(gè)逗號(hào)表達(dá)式的值蜗字。
③ 并不是在所有出現(xiàn)逗號(hào)的地方都組成逗號(hào)表達(dá)式打肝,如在變量說(shuō)明中脂新,函數(shù)參數(shù)表中逗號(hào)只是用作各變量之間的間隔符。

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        
        int x = 10, y = 15,z = 0;
         z = (x + 10,y + 10);
        printf("%d\n",z);
        
            }
    return 0;
}
輸出結(jié)果:25
        Program ended with exit code: 0

sizeof運(yùn)算符

sizeof是一個(gè)單目運(yùn)算符粗梭,它的運(yùn)算對(duì)象是變量或數(shù)據(jù)類(lèi)型争便,運(yùn)算結(jié)果為一個(gè)整數(shù)。運(yùn)算的一般形式如下:
sizeof(<類(lèi)型或變量名>)
說(shuō)明:它只針對(duì)數(shù)據(jù)類(lèi)型楼吃,而不針對(duì)變量!
若運(yùn)算對(duì)象為變量妄讯,則所求的結(jié)果是這個(gè)變量占用的內(nèi)存空間字節(jié)數(shù)孩锡;若運(yùn)算對(duì)象是數(shù)據(jù)類(lèi)型,則所求結(jié)果是這種數(shù)據(jù)類(lèi)型的變量占用的內(nèi)存空間字節(jié)數(shù)亥贸。

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        
        struct stuct {
            char *name;
            int a[10];
            int b;
        }stu;
        int a = 10;
        double b = 30;
        float c = 5;
        char d = 'a';
        printf("a bytes %lu\n",sizeof(a));
         printf("b bytes %lu\n",sizeof(b));
         printf("c bytes %lu\n",sizeof(c));
         printf("d bytes %lu\n",sizeof(d));
         printf("stu bytes %lu\n",sizeof(stu));
            }
    return 0;
}
輸出結(jié)果:
        a bytes 4
        b bytes 8
        c bytes 4
        d bytes 1
        stu bytes 56
        Program ended with exit code: 0

條件運(yùn)算符

條件運(yùn)算符(躬窜?)是C語(yǔ)言中唯一一個(gè)三目運(yùn)算符,它可以提供如if-then-else語(yǔ)句的簡(jiǎn)易操作炕置,其運(yùn)算的一般形式如下荣挨。
<表達(dá)式1> ? <表達(dá)式2> : <表達(dá)式3>
操作符“?”作用是這樣的:先計(jì)算表達(dá)式1的邏輯值,如果其值為真朴摊,則計(jì)算表達(dá)式2默垄,并將數(shù)值結(jié)果作為整個(gè)表達(dá)式的數(shù)值;如果表達(dá)式1的邏輯值為假甚纲,則計(jì)算表達(dá)式3口锭,并以它的結(jié)果作為整個(gè)表達(dá)式的值,
條件運(yùn)算符的優(yōu)先級(jí)高于賦值運(yùn)算符介杆,讀者可以自行分析一下以下語(yǔ)句的含義鹃操。
max = (a>b)?a:b
由于條件運(yùn)算符的優(yōu)先級(jí)高于賦值運(yùn)算符,因此春哨,先計(jì)算賦值語(yǔ)句的右邊部分荆隘。
當(dāng)a大于b為真(即a大于b)時(shí),條件表達(dá)式的值為a赴背;當(dāng)a大于b為假(即a大于b不成立)時(shí)椰拒,條件表達(dá)式的值為b。因此凰荚,max變量的值就是a和b中較大的值(若a與b相等時(shí)取b)耸三。
相當(dāng)于下面的語(yǔ)句:
if (a > b)
max = a;
else
max = b;
有一個(gè)面試題:寫(xiě)一個(gè)標(biāo)準(zhǔn)的比較兩個(gè)數(shù)大小取大的數(shù)的一個(gè)宏定義。
#define max a > b ? a : b

總結(jié)

這篇文章介紹了很多知識(shí)點(diǎn)浇揩,例子雖然沒(méi)有舉的不多仪壮,但是確實(shí)精華,希望讀者自己下來(lái)多去聯(lián)系胳徽,俗話(huà)說(shuō)的好“師傅領(lǐng)進(jìn)門(mén)积锅,修行靠自己”爽彤。

結(jié)尾

最后,希望讀者在讀文章的時(shí)候發(fā)現(xiàn)有錯(cuò)誤或者不好的地方缚陷,歡迎留言适篙,我會(huì)及時(shí)更改,感謝你的閱讀和評(píng)論已經(jīng)點(diǎn)贊收藏箫爷。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末嚷节,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子虎锚,更是在濱河造成了極大的恐慌硫痰,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,723評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件窜护,死亡現(xiàn)場(chǎng)離奇詭異效斑,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)柱徙,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,485評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門(mén)缓屠,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人护侮,你說(shuō)我怎么就攤上這事敌完。” “怎么了羊初?”我有些...
    開(kāi)封第一講書(shū)人閱讀 152,998評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵蠢挡,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我凳忙,道長(zhǎng)业踏,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,323評(píng)論 1 279
  • 正文 為了忘掉前任涧卵,我火速辦了婚禮勤家,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘柳恐。我一直安慰自己伐脖,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,355評(píng)論 5 374
  • 文/花漫 我一把揭開(kāi)白布乐设。 她就那樣靜靜地躺著讼庇,像睡著了一般。 火紅的嫁衣襯著肌膚如雪近尚。 梳的紋絲不亂的頭發(fā)上蠕啄,一...
    開(kāi)封第一講書(shū)人閱讀 49,079評(píng)論 1 285
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼歼跟。 笑死和媳,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的哈街。 我是一名探鬼主播留瞳,決...
    沈念sama閱讀 38,389評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼骚秦!你這毒婦竟也來(lái)了她倘?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 37,019評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤作箍,失蹤者是張志新(化名)和其女友劉穎硬梁,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體蒙揣,經(jīng)...
    沈念sama閱讀 43,519評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡靶溜,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,971評(píng)論 2 325
  • 正文 我和宋清朗相戀三年开瞭,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了懒震。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,100評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡嗤详,死狀恐怖个扰,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情葱色,我是刑警寧澤递宅,帶...
    沈念sama閱讀 33,738評(píng)論 4 324
  • 正文 年R本政府宣布,位于F島的核電站苍狰,受9級(jí)特大地震影響办龄,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜淋昭,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,293評(píng)論 3 307
  • 文/蒙蒙 一俐填、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧翔忽,春花似錦英融、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,289評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至材失,卻和暖如春痕鳍,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背龙巨。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,517評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工额获, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留够庙,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,547評(píng)論 2 354
  • 正文 我出身青樓抄邀,卻偏偏與公主長(zhǎng)得像耘眨,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子境肾,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,834評(píng)論 2 345

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