簡單的算術運算與表達式

C語言編程0基礎學習歷程(5)—— C的運算與表達式

目錄

在C語言中由算數運算符與其操作數組成的表達式稱爲算術表達式

1、運算符類別

其中只需要一個操作數的運算符稱爲一元運算符,需要兩個操作數的運算符稱爲二元運算符,需要三個操作數的運算符稱爲三元運算符(或三目運算符)。條件運算符是C語言中唯一一個三目運算符。

2、除法運算

不同於數學運算,C語言中分爲整數除法浮點數除法兩大類,前者所得結果爲餘數可能不爲零時整數商,後者爲餘數爲零的浮點數商。舉個例子,12 / 5結果爲2 ,但 12.0 / 5 結果爲2.400000。
例:

#include <stdio.h>
int main()
{
    int a=12;
    float b=12.0;
    a=a/5;
    b=b/5;
    printf("%d\n%f",a,b);
    return 0;
}

運行結果:

不同的除法運算結果

3、求餘運算

在C語言中求餘運算僅限於兩個操作數爲整數的情況,浮點數不可參與求餘運算。求餘運算的結果爲二者整除後的餘數,求餘運算常被用作取模,以限定數據範圍。

4、複合的賦值運算符

複合的賦值運算符即爲簡寫的賦值方式,這樣書寫不僅簡潔,而且執行效率更高一些。

注:複合運算符之間不應存在空格。

傳送門(表7第14行包含常見的複合的賦值運算符)

5、增一和減一運算符

對變量實行增一或減一是一種很常見的操作,爲此C語言專門提供了執行這種功能的運算符,即增一運算符(自增運算符)減一運算符(自減運算符)。其操作數具有左值性質,必須是變量,不可爲常量或表達式。

當自增(自減)運算符寫在變量前時稱爲前綴運算符,是在變量使用之前先對其進行加一(減一)操作,寫在後面即爲後綴運算符,是在變量是使用之後對其進行加一(減一)操作。此操作生成的代碼比等價的賦值運算生成的代碼執行效率更高一些。

例:

#include <stdio.h>
int main()
{
    int a=1;
    int b=1;
    printf("%d\n%d\n",a++,++b);
    printf("%d\n%d\n",a,b);
    return 0;
}

運行結果:
在這裏插入圖片描述

6、 宏常量與宏替換

衆所周知,π是一個常量,其大小約爲3.14159,常用於圓類的面積計算中,假如我們需要寫一個有關計算圓面積和周長的程序,其中多次需要調用π這個數的數值,我們應該怎麼辦?

一般的想法是在每處π出現的地方寫入3.14159,但如果我們想改變π的精度呢,難道要一個一個進行修改麼?這未免也太麻煩了。那麼如何解決這個問題呢?這就要用到宏常量宏替換了。

宏常量也稱爲符號常量,是指用一個標識符號來表示的常量。其一般形式爲:#define 標識符 字符串 (最後沒有分號結尾)
例:

#include <stdio.h>
#define PI 3.14159
int main()
{
    int a=1;
    int b=2;
    double areaA=a*a*PI;
    double areaB=b*b*PI;
    printf("%lf,%lf\n",areaA,areaB);
    return 0;
}

運行結果:
在這裏插入圖片描述

宏定義中的標識符被稱爲宏名,將程序中出現的宏名替換成字符串的過程叫做宏替換

7、const常量

使用宏常量最大的問題是,宏常量沒有數據類型,編譯時僅僅是進行簡單的字符串替換,而字符串替換時常遇到意想不到的問題。爲解決這個問題,就要引入const常量。

只要將const類型修飾符放在類型名之前,即可將類型名後的標識符聲明爲具有該類型的const常量。由於編譯器將其放在只讀存儲區,不允許在程序中改變其值,因此const常量只允許在定義時賦初值。

例:

#include <stdio.h>
const double PI=3.14159;
int main()
{
    int a=1;
    int b=2;
    double areaA=a*a*PI;
    double areaB=b*b*PI;
    printf("%lf,%lf\n",areaA,areaB);
    return 0;
}

運行結果:
在這裏插入圖片描述

8、自動類型轉換

請讀者思考一下這樣的問題,如果兩種不同類型的操作數進行運算,運算結果會是什麼類型呢?

C編譯器會將所有操作數轉換爲取值範圍較大的操作數類型,稱爲類型提升。規則如下:

char
int
short
unsigned int
long
unsigned long
double
float
long double

(能力有限,關係圖不甚美觀,望諒解)

如果是賦值時遇到左右側類型不同,則將右側表達式的值轉換爲左側變量的類型。當然,由小到大的進行類型轉換時是合理的,但如果反過來將出現一些問題。
附:
表1

左側變量類型 右側表達式類型 可能丟失的信息
singed char char 當值大於127時,轉換結果爲負數
char short 高8位
char int (16位) 高8位
char int (32位) 高24位
char long 高24位
short int(16位)
short int(32位) 高16位
int(16位) long 高16位
int(32位) long
int float 小數部分
float double 精度
double long double 精度
9、強制類型轉換

格式:(類型)表達式。使用強制類型轉換可以明確表示程序打算執行何種類型轉換。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章