C語言隱式類型轉(zhuǎn)換規(guī)則 (比較實用)_第1頁
C語言隱式類型轉(zhuǎn)換規(guī)則 (比較實用)_第2頁
C語言隱式類型轉(zhuǎn)換規(guī)則 (比較實用)_第3頁
C語言隱式類型轉(zhuǎn)換規(guī)則 (比較實用)_第4頁
C語言隱式類型轉(zhuǎn)換規(guī)則 (比較實用)_第5頁
已閱讀5頁,還剩1頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

1、C語言隱式類型轉(zhuǎn)換規(guī)則C語言規(guī)定,不同類型的數(shù)據(jù)需要轉(zhuǎn)換成同一類型后才可進行計算,在整型、實型和字符型數(shù)據(jù)之間通過類型轉(zhuǎn)換便可以進行混合運算(但不是所有類型之間都可以進行轉(zhuǎn)換).當混合不同類型的變量進行計算時,便可能會發(fā)生類型轉(zhuǎn)換相同類型的數(shù)據(jù)在轉(zhuǎn)換時有規(guī)則可循:字符必須先轉(zhuǎn)換為整數(shù)(C語言規(guī)定字符類型數(shù)據(jù)和整型數(shù)據(jù)之間可以通用)short型轉(zhuǎn)換為int型(同屬于整型)float型數(shù)據(jù)在運算時一律轉(zhuǎn)換為雙精度(double)型,以提高運算精度(同屬于實型)賦值時,一律是右部值轉(zhuǎn)換為左部類型注當整型數(shù)據(jù)和雙精度數(shù)據(jù)進行運算時,C先將整型數(shù)據(jù)轉(zhuǎn)換成雙精度型數(shù)據(jù),再進行運算,結果為雙精度類型數(shù)據(jù)當字

2、符型數(shù)據(jù)和實型數(shù)據(jù)進行運算時,C先將字符型數(shù)據(jù)轉(zhuǎn)換成實型數(shù)據(jù),然后進行計算,結果為實型數(shù)據(jù)2.4 數(shù)據(jù)類型轉(zhuǎn)換在C語言的表達式中,準許對不同類型的數(shù)值型數(shù)據(jù)進行某一操作或混合運算。當不同類型的數(shù)據(jù)進行操作時,應當首先將其轉(zhuǎn)換成相同的數(shù)據(jù)類型,然后進行操作。數(shù)據(jù)類型轉(zhuǎn)換有兩種形式,即隱式類型轉(zhuǎn)換和顯示類型轉(zhuǎn)換。C語言規(guī)定的轉(zhuǎn)換規(guī)則是由低級向高級轉(zhuǎn)換。例如,如果一個操作符帶有兩個類型不同的操作數(shù)時,那么在操作之前行先將較低的類型轉(zhuǎn)換為較高的類型,然后進行運算,運算結果是較高的類型。更確切地說,對于每一個算術運算符,則遵循圖2-2所示的規(guī)則。圖2-2 數(shù)據(jù)類型轉(zhuǎn)換規(guī)則之一注意:在表達式中,所有的fl

3、oat類型都轉(zhuǎn)換為double型以提高運算精度。在賦值語句中,如果賦值號左右兩端的類型不同,則將賦值號右邊的值轉(zhuǎn)換為賦值號左邊的類型,其結果類型還是左邊類型。因為函數(shù)參數(shù)是表達式,因此,當參數(shù)傳遞給函數(shù)時,也發(fā)生類型轉(zhuǎn)換。具體地說,char和short均轉(zhuǎn)換為int;float轉(zhuǎn)換為double。這就是為什么我們把函數(shù)參數(shù)說明為int和double,盡管調(diào)用函數(shù)時用char和float .也可以將圖2-2所示的規(guī)則用圖2-3表示。圖2-3中的水平箭頭表示必定轉(zhuǎn)換,縱向箭頭表示兩個操作對象類型不同時的轉(zhuǎn)換方向。圖2-3 數(shù)據(jù)類型轉(zhuǎn)換規(guī)則之二下面舉行說明類型轉(zhuǎn)換的規(guī)則。例如執(zhí)行:x=100+

4、9;a'+1.5 * u+f/'b'-s * 3.1415926其中,u為unsigned型,f為float型,s為short型,x為float型。式中右面表達式按如下步驟處理:(1)首先將'a'、'b'和s換成int,將1.5和f轉(zhuǎn)換為double型。(2)計算100+'a',因'a'已轉(zhuǎn)換為int型,于是此運算結果為197。(3)計算1.5*u,由于1.5已轉(zhuǎn)換為double,u是unsigned型,于是首先u轉(zhuǎn)換為double,然后進行運算,運算結果為double。(4)計算197+1.5 * u,先

5、將197轉(zhuǎn)換為double(如197.0000),其結果為double。(5)計算f/ 'b',f已轉(zhuǎn)換為double,'b'已轉(zhuǎn)換為int,于是先將'b'再轉(zhuǎn)換為double,其結果為double。(6)計算(197+1.5 * u)+f / 'b',者均為double,于是結果也為double。(7)計算s * 3.1415926,先將s由int轉(zhuǎn)換為double,然后進行運算,其結果為double。(8)最后與前面得的結果相減,結果為double。(9)最后將表達式的結果轉(zhuǎn)換為float并賦給x。int i;i=i+9.80

6、1按照隱式處理方式,在處理i=i+9.801時,首先i轉(zhuǎn)換為double型,然后進行相加,結果為double型,再將double型轉(zhuǎn)換為整型賦給i。int i;i=i+(int)9.801這時直接將9.801轉(zhuǎn)換成整型,然后與i相加,再把結果賦給i。這樣可把二次轉(zhuǎn)換簡化為一次轉(zhuǎn)換。顯示類型轉(zhuǎn)換的方法是在被轉(zhuǎn)換對象(或表達式)前加類型標識符,其格式是: (類型標識符)表達式例如,有如下程序段:main()int a,b;float c;b=a+int(c);printf("b=d% n",b);在上述程序的運行過程中,在執(zhí)行語句b=a+int(c)時,將c的值臨時強制性轉(zhuǎn)化為

7、int型,但變量c在系統(tǒng)中仍為實型變量,這一點很重要,不少初學者在這個問題上忽略了這個問題。一個表達式完成一個或多個操作,最終得到一個結果,而結果的數(shù)據(jù)類型由參加運算的操作決定。最簡單的表達式是只含一個常量或變量的表達式,即只含一個操作數(shù)而不含運算符。C語言中表達式的種類十分豐富,主要有如下一些:n 算術表達式:進行一般的計算。n 賦值表達式:進行賦值操作。n 關系表達式:進行比較判斷。n 邏輯表達式:進行邏輯比較判斷。n 條件表達式:進行條件滿足與否的判斷。n 逗號表達式:實際上是一種復雜運算,可以包含多個算術表達式。 2C語言的操作符C語言的特點之一是具有豐富和使用靈活的運算符,概括起來它

8、有如下的幾類運算符:n 算術運算符。n 賦值運算符(包括符合賦值運算符)。n 關系運算符。n 邏輯運算符。n 條件運算符。n 逗號運算符。n 位運算符。n 指針運算符。n 求字節(jié)運算符(可以歸并到函數(shù)的應用中去,它是通過函數(shù)sizeof()來進行運算的)。n 強制類型轉(zhuǎn)換運算符。這些運算符如表2-4所示。表2-4 C語言中的運算符名稱操作符自增,自減+ +,- -邏輯與、或、非,!續(xù)表24名稱操作符指針操作及引用*,加、減、乘、除、求模運算+,*,/,%關系操作符<,<=,>,>=,= =,! =按位與、或、異或、求反&,丨,逗號表達式,類型轉(zhuǎn)換()移位運算&l

9、t; <,> >條件運算?:求占用的字節(jié)數(shù)sizeof賦值=,+ =, =,*=,/ =,% =先看程序:#include<stdio.h>#include<stdlib.h>int main(int argc, char*argv)unsigned int right = 1;char left = -1;if(left < right)printf("%d < %dn", left, right);else if(left = right)printf("%d = %dn", left, righ

10、t);else printf("%d > %dn", left, right);system("PAUSE");return 0;運行結果是:-1 > 1解釋:按步驟進行.1. 如果其中一個操作數(shù)為long double類型,則另一個操作數(shù)被轉(zhuǎn)換為long double.2. 否則,如果其中一個操作數(shù)為double, 則另一個操作數(shù)被轉(zhuǎn)換為double.3. 否則,如果其中一個操作數(shù)為float, 則另一個操作數(shù)也轉(zhuǎn)換為float.4. 否則,兩個操作數(shù)進行 "整型升級":a. 如果其中一個操作數(shù)為unsigned long int, 則另一個操作數(shù)也被視為unsigned long int.b. 否則,如果其中一個操作數(shù)為long int,而另一個操作數(shù)類型是unsigned int, 并且long int能夠表示unsignedint的所有值,則另一個操作數(shù)也被視為long int;如果long int不能表

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論