官术网_书友最值得收藏!

運算規則

整型和實型數據可以混合運算,并且由于字符型數據可以與整型通用,因此,整型、實型、字符型數據間可以混合運算。例如,134+'a'+3.4-45.8*'c'是合法的。

但在運算時,系統會自動將不同類型的數據轉換成同一類型的數據,然后再進行運算。轉換的規則由小到大如圖1.24所示:

圖1.24

計算機運算次序為由左到右,如10+'a'+int*float-double/long:

(1)進行10+char的運算,先將char轉換成整數,得結果為107;

(2)由于*比+優先,先進行int*float的運算。將兩數都轉為double型;

(3)107與int*float的積相加,先將整數轉為雙精度數。結果為double型;

(4)將變量long轉化為double型,double/long的結果為double型;

(5)將10+'a'+int*float的結果與double/long的商相減,結果為double型。

C++語言還規定了運算符的優先級和結合性,在表達式求值時,先按運算符的優先級別高低次序執行,例如先乘除后加減。如果一個運算對象兩側的運算符的優先級別相同,如a-b+c,則按規定的“結合方向”處理。

算術運算符的結合方向為“先左后右”,“先左后右”又稱“左結合性”。以后還可以看到有些運算符的結合方向為“自右向左”,即右結合性(例如,賦值運算符)。

C++語言的優先級和結合性是一個很重要的概念,特別是關于“結合性”的概念在其他一些高級語言中是沒有的。

C++的運算符及其優先級請參見附錄。

可以利用強制類型轉換運算符將一個表達式轉換成所需的類型。例如:

    (double)a   (將a轉換成double型)
    (int)(x+y)  (將x+y的值轉為int型)
    (float)(4%3)  (將4%3的值轉換成float型)

請看一個強制類型轉換的例子:

1 //強制類型轉換
2 #include <iostream>
3 using namespace std;
4 
5 int main()
6 {
7  float x=3.84;
8  int i;
9  i=(int)x;             //將float類型強制轉成int類型
10  cout<<i<<endl;
11  system("pause");
12  return 0;
13 }

運行結果如下:

    x=3.84 i=3

由此可見,通過強制轉換,原float型的整數部分不變,而小數部分被“丟棄”。

C++有兩種轉換,一種是系統自動進行的類型轉換,如3+3.4。另一種是強制類型轉換。當自動類型轉換不能實現目的時,可以用強制類型轉換。如“%”運算符要求其兩側均為整型量,若x為float型,則“x%3”不合法,必須用“(int)x%3”。由于強制類型轉換運算優先級高于%運算,因此先進行強制轉換再對3求模。

類似于(int)(x+y)這樣的表達式必須用括號括起來,如果寫成(int)x+y,則只將x轉換為整型,然后與y相加。

在后面學到函數調用時,有時為了使實參與形參類型一致,可以用強制類型轉換運算符得到一個所需類型的參數。

C++的自增自減運算符++和--的作用是使變量的值增1或減1,如:

++i,--i(在使用i之前,先使i的值加(減)1)

i++,i--(在使用i之后,使i的值加(減)1)

++和--只能用于變量,而不能用于常量或表達式,如5++或(a+b)++都是不合法的。

++和--的結合方向是“自右至左”。

粗略地看,++i和i++的作用相當于i=i+1,但它們的不同之處在于++i是先執行i=i+1后,再使用i的值;而i++是先使用i的值后,再執行i=i+1。如果i的原值等于3,則執行下面的賦值語句:

(1)j=++i;(i的值先變成4,再賦給j,j的值為4)

(2)j=i++;(先將i的值3賦給j,j的值為3,然后i變為4)

例如:

    i=3;
    cout<<++i;
    輸出“4”。若改為cout<<i++;
    則輸出“3”。

又如:

    i=1;
    i=(++i)+(++i);
    cout<<i;
    該結果為6,因為最后i的值為3,3+3=6。

另外,一般情況下++i的運行速度要略快于i++,這涉及到編譯原理。

賦值符號“=”就是賦值運算符,它的作用是將一個數據賦給一個變量。

在賦值符“=”之前加上其他運算符,稱為復合運算符,例如“+=”。其含義如下面各例:

a+=3 等價于a=a+3

x*=y+8 等價于x=x*(y+8)

x%=3 等價于x=x%3

C++語言采用這種復合運算符,一是為了程序的精練;二是為了提高編譯效率(此處涉及編譯原理的知識,暫不必深究)。

注意:如果是包含若干項的表達式,則相當于它有括號,如:

x%=y+4相當于x%=(y+4),即x=x%(y+4)

而不是x=x%y+4

C++語言提供一種特殊的運算符——逗號運算符,用它將兩個表達式連接起來,如:

    3+5,6+8

稱為逗號表達式,又稱為“順序求值運算符”。逗號表達式的求解過程是:先求解表達式1,再求解表達式2。整個逗號表達式的值是表達式2的值。

我想起我們前面定義變量時已經使用過逗號表達式了,如:

int a,b=0,c,d=34; double x,y,z;

主站蜘蛛池模板: 福清市| 博爱县| 江西省| 绍兴市| 余干县| 五常市| 和田市| 金沙县| 伊通| 六枝特区| 佳木斯市| 高安市| 交城县| 蓝山县| 镇远县| 军事| 大丰市| 龙江县| 凯里市| 高平市| 安顺市| 莎车县| 道孚县| 竹山县| 唐海县| 陆川县| 满洲里市| 贺州市| 永泰县| 寻甸| 慈溪市| 长乐市| 陵水| 纳雍县| 翁源县| 扬州市| 玛曲县| 茌平县| 澎湖县| 东兰县| 延长县|