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

今天談到的知識其實之前或多或少都接觸過了,我們再把它整理一下。編程中幾個基本的動作是運算、判斷和比較,我們接下來的內(nèi)容就重點學(xué)習(xí)這些。

一,算術(shù)運算符

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

  • 單目操作是指對一個操作數(shù)進行操作。例如: -a是對a進行一目負(fù)操作。
  • 雙目操作(或多目操作)是指兩個操作數(shù)(或多個操作數(shù))進行操作。

1.雙目運算符

這個比較好理解,如同數(shù)學(xué)中的運算符號。

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

重點說一下后兩個運算符:

  • 除法運算符左右兩邊的數(shù)據(jù)類型決定了運算結(jié)果的類型。兩邊都是整數(shù)結(jié)果為整數(shù),有任一方是小數(shù),結(jié)果為小數(shù)。如果兩個整數(shù)相除有余數(shù),舍棄余數(shù)。運算符右邊的數(shù)不能為0
  • 整除運算符左右兩邊的數(shù)據(jù)必須都是整數(shù),結(jié)果是這兩個數(shù)相除的余數(shù)值。如果能整除,結(jié)果為0

下面我們用一段代碼說明這四個運算符的用法:

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é)果如下:

運行結(jié)果

2. 單目運算符

C語言中有兩個很有用的單目運算符。這兩個運算符就是增1和減1運算符"++"和"--"。

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

如:

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

這三句意義相同。

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

這三句意義也相同。

自增和自減運算需要注意這樣的問題:

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)于 -- 的程序大家自己實現(xiàn)一下,看看會是神馬結(jié)果。

如果你對運算符還有什么疑問,請修改這些代碼,驗證你的疑問。通過代碼學(xué)習(xí)永遠是最好的方法。

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

1. 賦值運算符

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

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

賦值運算有一種特殊的寫法:

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

第二行和第三行意思相同,第四行和第五行意思相同,可以互相替換。這是一種C語言中的簡便寫法。

2. 類型轉(zhuǎn)換

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

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

基本原則:

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

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

char, short < int < float < double

請看下面這段代碼:

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

    a = f * b; // 整數(shù)和浮點類型運算,結(jié)果為浮點類型,因為它類型級別高
    printf("a = %d\n", a);

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

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

a = 4
a = 1

其他類型賦值時的隱式轉(zhuǎn)換請大家自己編程實驗。

這里有個重點問題需要強調(diào),浮點類型的和整數(shù)類型計算時,結(jié)果為浮點類型。我們看一個常見問題。

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

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

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

f = 2.0000

原因在于,a是個整數(shù),2也是個整數(shù),它們的計算結(jié)果也是整數(shù)。此時,就已經(jīng)舍棄了計算結(jié)果中的小數(shù)部分。因此,賦值時就自然沒有小數(shù)部分。

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

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

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

因為整數(shù)a和浮點數(shù)2.0計算的結(jié)果是浮點型(double),因此保留了小數(shù)部分。之后再把=右邊的double類型轉(zhuǎn)換成左邊的float類型。仔細想想,能理解吧。

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

在計算中,我們常常需要主動要求計算機改變變量的類型。這是可以這樣做。

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

按照這種格式寫,右邊部分的類型就會被強制轉(zhuǎn)換成左邊括號中的類型。看看具體代碼:

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é)果如圖所示:


運行結(jié)果

重點說一下 f = (int)6.6 / 3;和f = (int)(6.6 / 3);的區(qū)別,前者是把6.6轉(zhuǎn)成int型,變成6之后再計算。后者是先計算6.6 / 3,得到結(jié)果2.2,之后再強行轉(zhuǎn)換成int型。

今天先說到這里,其他的運算符下次再聊。

很多朋友來信說希望講一些難度更高的知識點,不知道大家是否覺得這個系列講得太基礎(chǔ)。

我在這里做個簡單調(diào)查,覺得前幾篇有收獲的同學(xué)請留言告訴我,覺得過于基礎(chǔ)的同學(xué)請留言說明你們希望講些什么知識點。

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


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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

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

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