C語(yǔ)言從零開始(六)-運(yùn)算符與類型轉(zhuǎn)換

今天談到的知識(shí)其實(shí)之前或多或少都接觸過(guò)了,我們?cè)侔阉硪幌隆>幊讨袔讉€(gè)基本的動(dòng)作是運(yùn)算纵穿、判斷和比較,我們接下來(lái)的內(nèi)容就重點(diǎn)學(xué)習(xí)這些奢人。

一谓媒,算術(shù)運(yùn)算符

算術(shù)運(yùn)算符分為單目和雙目操作:

  • 單目操作是指對(duì)一個(gè)操作數(shù)進(jìn)行操作。例如: -a是對(duì)a進(jìn)行一目負(fù)操作何乎。
  • 雙目操作(或多目操作)是指兩個(gè)操作數(shù)(或多個(gè)操作數(shù))進(jìn)行操作句惯。

1.雙目運(yùn)算符

這個(gè)比較好理解土辩,如同數(shù)學(xué)中的運(yùn)算符號(hào)。

+ : 加法運(yùn)算
- : 減法運(yùn)算
* : 乘法運(yùn)算
/ : 除法運(yùn)算
% : 求余運(yùn)算(又叫模運(yùn)算)

重點(diǎn)說(shuō)一下后兩個(gè)運(yùn)算符:

  • 除法運(yùn)算符左右兩邊的數(shù)據(jù)類型決定了運(yùn)算結(jié)果的類型宗弯。兩邊都是整數(shù)結(jié)果為整數(shù)脯燃,有任一方是小數(shù),結(jié)果為小數(shù)蒙保。如果兩個(gè)整數(shù)相除有余數(shù),舍棄余數(shù)欲主。運(yùn)算符右邊的數(shù)不能為0
  • 整除運(yùn)算符左右兩邊的數(shù)據(jù)必須都是整數(shù)邓厕,結(jié)果是這兩個(gè)數(shù)相除的余數(shù)值。如果能整除扁瓢,結(jié)果為0

下面我們用一段代碼說(shuō)明這四個(gè)運(yùn)算符的用法:

int a = 3;
int b = 2;

int sum, diff, product, res, mod;

// +
sum = a + b;
printf("sum = %d\n", sum);

// -
diff = a - b;
printf("diff = %d\n", diff);

// *
product = a * b;
printf("product = %d\n",  product);

// /
res = a / b;
printf("res = %d\n", res);

// %
mod = a % b;
printf("mod = %d\n", mod);

這段代碼的結(jié)果如下:

運(yùn)行結(jié)果

2. 單目運(yùn)算符

C語(yǔ)言中有兩個(gè)很有用的單目運(yùn)算符详恼。這兩個(gè)運(yùn)算符就是增1和減1運(yùn)算符"++"和"--"。

  • ++ 操作數(shù)加1
  • -- 操作數(shù)減1

如:

x = x + 1;
x++;
++x;

這三句意義相同引几。

x = x - 1;
x--;
--x;

這三句意義也相同昧互。

自增和自減運(yùn)算需要注意這樣的問(wèn)題:

x = m++;
x = ++m;

這兩句的結(jié)果完全不同。

x = m++; // 表示將m的值賦給x后, m加1伟桅。
x = ++m; // 表示m先加1后, 再將新值賦給x敞掘。

我們看一下這段代碼:

int a = 1;
int b = 1;
int ret;

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

結(jié)果如下:

QQ截圖20151103220816.png

關(guān)于 -- 的程序大家自己實(shí)現(xiàn)一下,看看會(huì)是神馬結(jié)果楣铁。

如果你對(duì)運(yùn)算符還有什么疑問(wèn)玖雁,請(qǐng)修改這些代碼,驗(yàn)證你的疑問(wèn)盖腕。通過(guò)代碼學(xué)習(xí)永遠(yuǎn)是最好的方法赫冬。

二、賦值語(yǔ)句中的數(shù)據(jù)類型轉(zhuǎn)換

1. 賦值運(yùn)算符

這個(gè)大家都很熟悉溃列,就是“=”劲厌。它的作用是把右邊的值或計(jì)算結(jié)果賦給左邊的變量。如:

int a = 0;
int a = b + c;

賦值運(yùn)算有一種特殊的寫法:

int a = 0;
a = a + 5;
a += 5;
a = a - 3;
a -= 3;

第二行和第三行意思相同听隐,第四行和第五行意思相同补鼻,可以互相替換。這是一種C語(yǔ)言中的簡(jiǎn)便寫法遵绰。

2. 類型轉(zhuǎn)換

類型轉(zhuǎn)換是指不同類型的變量混用時(shí)的類型改變辽幌。

2.1 隱式類型轉(zhuǎn)換

基本原則:

  • 在賦值語(yǔ)句中, 等號(hào)右邊的值轉(zhuǎn)換為等號(hào)左邊變量所屬的類型
  • 不同類型混合計(jì)算時(shí),結(jié)果類型為數(shù)據(jù)類型級(jí)別較高的
  • 所有的浮點(diǎn)預(yù)算都是以double進(jìn)行的

數(shù)據(jù)類型級(jí)別順序:

char, short < int < float < double

請(qǐng)看下面這段代碼:

main()
{
    int a, b = 3;
    float f = 1.5;

    a = f * b; // 整數(shù)和浮點(diǎn)類型運(yùn)算椿访,結(jié)果為浮點(diǎn)類型乌企,因?yàn)樗愋图?jí)別高
    printf("a = %d\n", a);

    a = f; // 把一個(gè)浮點(diǎn)類型的變量賦值給整數(shù)類型,小數(shù)部分會(huì)被自動(dòng)舍去
    printf("a = %d\n", a);
}

這段程序的運(yùn)行結(jié)果為:

a = 4
a = 1

其他類型賦值時(shí)的隱式轉(zhuǎn)換請(qǐng)大家自己編程實(shí)驗(yàn)成玫。

這里有個(gè)重點(diǎn)問(wèn)題需要強(qiáng)調(diào)加酵,浮點(diǎn)類型的和整數(shù)類型計(jì)算時(shí)拳喻,結(jié)果為浮點(diǎn)類型。我們看一個(gè)常見問(wèn)題猪腕。

main()
{
    float f;
    int a = 5;
    f = a / 2;

    printf("f = %f\n",  f);
}

這段程序的運(yùn)行結(jié)果是:

f = 2.0000

原因在于冗澈,a是個(gè)整數(shù),2也是個(gè)整數(shù)陋葡,它們的計(jì)算結(jié)果也是整數(shù)亚亲。此時(shí),就已經(jīng)舍棄了計(jì)算結(jié)果中的小數(shù)部分腐缤。因此捌归,賦值時(shí)就自然沒有小數(shù)部分。

如果我們需要得到f = 2.5怎么辦呢岭粤?可以這樣寫:

main()
{
    float f;
    int a = 5;
    f = a / 2.0;

    printf("f = %f\n",  f);
}

因?yàn)檎麛?shù)a和浮點(diǎn)數(shù)2.0計(jì)算的結(jié)果是浮點(diǎn)型(double)惜索,因此保留了小數(shù)部分。之后再把=右邊的double類型轉(zhuǎn)換成左邊的float類型剃浇。仔細(xì)想想巾兆,能理解吧。

2.2 強(qiáng)制類型轉(zhuǎn)換

在計(jì)算中虎囚,我們常常需要主動(dòng)要求計(jì)算機(jī)改變變量的類型角塑。這是可以這樣做。

(數(shù)據(jù)類型)(表達(dá)式或變量)

按照這種格式寫溜宽,右邊部分的類型就會(huì)被強(qiáng)制轉(zhuǎn)換成左邊括號(hào)中的類型吉拳。看看具體代碼:

main()
{
    float f;

    f = 6.6 / 3;
    printf("f = %f\n",  f);

    f = (int)6.6 / 3;
    printf("f = %f\n",  f);

    f = (int)(6.6 / 3);
    printf("f = %f\n",  f);
}

結(jié)果如圖所示:


運(yùn)行結(jié)果

重點(diǎn)說(shuō)一下 f = (int)6.6 / 3;和f = (int)(6.6 / 3);的區(qū)別适揉,前者是把6.6轉(zhuǎn)成int型留攒,變成6之后再計(jì)算。后者是先計(jì)算6.6 / 3嫉嘀,得到結(jié)果2.2炼邀,之后再?gòu)?qiáng)行轉(zhuǎn)換成int型。

今天先說(shuō)到這里剪侮,其他的運(yùn)算符下次再聊拭宁。

很多朋友來(lái)信說(shuō)希望講一些難度更高的知識(shí)點(diǎn),不知道大家是否覺得這個(gè)系列講得太基礎(chǔ)瓣俯。

我在這里做個(gè)簡(jiǎn)單調(diào)查杰标,覺得前幾篇有收獲的同學(xué)請(qǐng)留言告訴我,覺得過(guò)于基礎(chǔ)的同學(xué)請(qǐng)留言說(shuō)明你們希望講些什么知識(shí)點(diǎn)彩匕。

我是天花板腔剂,讓我們一起在軟件開發(fā)中自我迭代。
如有任何問(wèn)題驼仪,歡迎與我聯(lián)系掸犬。


上一篇:C語(yǔ)言從零開始(五)-常量&變量
下一篇:C語(yǔ)言從零開始(七)-其他運(yùn)算符

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末袜漩,一起剝皮案震驚了整個(gè)濱河市忿峻,隨后出現(xiàn)的幾起案子恤磷,更是在濱河造成了極大的恐慌送矩,老刑警劉巖蜕煌,帶你破解...
    沈念sama閱讀 206,968評(píng)論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異主慰,居然都是意外死亡苞尝,警方通過(guò)查閱死者的電腦和手機(jī)霹购,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,601評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門呻顽,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)雹顺,“玉大人,你說(shuō)我怎么就攤上這事廊遍。” “怎么了贩挣?”我有些...
    開封第一講書人閱讀 153,220評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵喉前,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我王财,道長(zhǎng)卵迂,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,416評(píng)論 1 279
  • 正文 為了忘掉前任绒净,我火速辦了婚禮见咒,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘挂疆。我一直安慰自己改览,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,425評(píng)論 5 374
  • 文/花漫 我一把揭開白布缤言。 她就那樣靜靜地躺著宝当,像睡著了一般。 火紅的嫁衣襯著肌膚如雪胆萧。 梳的紋絲不亂的頭發(fā)上庆揩,一...
    開封第一講書人閱讀 49,144評(píng)論 1 285
  • 那天,我揣著相機(jī)與錄音跌穗,去河邊找鬼订晌。 笑死,一個(gè)胖子當(dāng)著我的面吹牛蚌吸,可吹牛的內(nèi)容都是我干的锈拨。 我是一名探鬼主播,決...
    沈念sama閱讀 38,432評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼套利,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼推励!你這毒婦竟也來(lái)了鹤耍?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,088評(píng)論 0 261
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤验辞,失蹤者是張志新(化名)和其女友劉穎稿黄,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體跌造,經(jīng)...
    沈念sama閱讀 43,586評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡杆怕,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,028評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了壳贪。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片陵珍。...
    茶點(diǎn)故事閱讀 38,137評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖违施,靈堂內(nèi)的尸體忽然破棺而出互纯,到底是詐尸還是另有隱情,我是刑警寧澤磕蒲,帶...
    沈念sama閱讀 33,783評(píng)論 4 324
  • 正文 年R本政府宣布留潦,位于F島的核電站,受9級(jí)特大地震影響辣往,放射性物質(zhì)發(fā)生泄漏兔院。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,343評(píng)論 3 307
  • 文/蒙蒙 一站削、第九天 我趴在偏房一處隱蔽的房頂上張望坊萝。 院中可真熱鬧,春花似錦许起、人聲如沸十偶。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,333評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)扯键。三九已至,卻和暖如春珊肃,著一層夾襖步出監(jiān)牢的瞬間荣刑,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,559評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工伦乔, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留厉亏,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,595評(píng)論 2 355
  • 正文 我出身青樓烈和,卻偏偏與公主長(zhǎng)得像爱只,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子招刹,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,901評(píng)論 2 345

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

  • 謹(jǐn)記: 上帝在締造每個(gè)人的時(shí)候恬试,給予每個(gè)人的一切都是相同的窝趣,然而,人與人卻是存在如此大的差距训柴,記著上帝為你關(guān)上了一...
    長(zhǎng)風(fēng)留言閱讀 4,861評(píng)論 0 5
  • 關(guān)于 Swift 重要這個(gè)文檔所包含的準(zhǔn)備信息, 是關(guān)于開發(fā)的 API 和技術(shù)的哑舒。這個(gè)信息可能會(huì)改變, 根據(jù)這個(gè)文...
    無(wú)灃閱讀 4,275評(píng)論 1 27
  • 前言 把《C++ Primer》[https://book.douban.com/subject/25708312...
    尤汐Yogy閱讀 9,506評(píng)論 1 51
  • 二月都要過(guò)完了,哈幻馁,好像年初定下的目標(biāo)還沒有怎么執(zhí)行洗鸵,怎么一年就過(guò)去了快六分之一了呢?一個(gè)兩歲的孩子覺得時(shí)間過(guò)得慢...
    Vicever閱讀 547評(píng)論 10 8
  • 我用靈魂 做成我最美的嫁衣 帶著滿腹的心事 與筆墨共浴 藏在婚床上的花生 是豌豆公主日夜辛勤 饋贈(zèng)的禮物 絢爛的花...
    許二可閱讀 300評(píng)論 1 3