今天談到的知識其實之前或多或少都接觸過了,我們再把它整理一下。編程中幾個基本的動作是運算、判斷和比較,我們接下來的內(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é)果如下:
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é)果如下:
關(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é)果如圖所示:
重點說一下 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語言從零開始(七)-其他運算符