Objective C中的型別轉換

2021-06-07 12:29:18 字數 1905 閱讀 7126

型別轉換表2-3列出了簡單資料型別、示例和格式符。

表2-3 簡單資料型別、示例和格式符

不同資料型別的資料是可以轉換成同一種資料型別,然後進行計算。轉換的方法有兩種,一種是自動轉換,一種是強制轉換。自動轉換發生在不同資料型別的資料混合運算時,由系統自動完成。objective-c 編譯器會遵循一些非常嚴格的規則,編譯器按照下面的順序轉換不同型別的運算元。

①如果其中乙個數是long double型別的,那麼另乙個運算元被轉換為long double型別,計算的結果也是long double型別。

②否則,如果其中乙個數是double型別的,那麼另乙個運算元被轉換為double型別,計算的結果也是double型別。

③否則,如果其中乙個數是float 型別的,那麼另乙個運算元被轉換為float 型別,計算的結果也是float型別。

④否則,如果乙個數是unisigned型別,那麼另乙個運算元被轉換為unisigner 型別,計算的結果也是unisigner型別。

⑤否則,如果其中乙個數是long long int 型別,那麼另乙個運算元被轉換為long long int 型別,計算的結果也是long long int 型別。

⑥否則,如果其中乙個數是long int型別,那麼另乙個運算元被轉換為long int型別,計算的結果也是long int型別。

7、否則,如果其中乙個數是int型別,那麼其他的如bool、char、short int、bit field、列舉型別,則全部轉換為int 型別,計算的結果也是int型別。

8、unsigned 一般比同級的整形 型別高兩個級別。

圖2-5 表示了幾個常用的數值型資料的自動轉換規則,資料可以向箭頭所指的型別轉換。

圖2-5 自動轉換規則

【例2-11】資料型別轉換。

#import <

foundation/foundation.h>

int main (int argc, const char * argv)  

【程式結果】

s=78

本例程式中,pi 為實型,s、r 為整型。在執行s=r*r*pi 語句時,r 和pi 都轉換成double型計算,結果也為double型。但由於s為整型,故賦值結果仍為整型,捨去了小數部分。

強制型別轉換是通過型別轉換運算來實現的,其一般形式為:

(型別說明符) (表示式) 

其作用是把表示式的運算結果強制轉換成型別說明符所表示的型別,例如:

(float) a //把a 轉換為實型  

(int) (x+y) //把x+y 的結果轉換為整型 

在使用強制轉換時,應注意以下問題:型別說明符和表示式都必須加括號(單個變數可以不加括號),如把(int)(x+y)寫成(int)x+y 則成了把x 轉換成int 型之後再與y 相加了。另外,無論是強制轉換或是自動轉換,都只是為了本次運算的需要而對變數的資料長度進行的臨時性轉換,而不改變資料宣告時對該變數定義的型別。

【例2-12】強制型別轉換例項。

#import <

foundation/foundation.h>

int main (int argc, const char * argv)  

【程式結果】

(int) f=5,f=5.750000 

本例表明,f 雖強制轉為int 型,但只在運算中起作用,是臨時的,而f 本身的型別並不改變。因此,(int)f的值為5,刪去了小數,而f的值仍為5.750000。

Objective C中的列舉型別

列舉型別如果乙個變數只有幾種可能的值,那麼,可以把它定義為列舉型別 也稱為列舉 所謂列舉是指將變數的值一一枚舉出來,變數的值只限於列舉出來的值的範圍內。列舉型別的定義是以enum 關鍵字開頭,然後是列舉資料型別的名稱,而後是一系列值,這些值包含在一對花括號中,它們定義了可以給該型別指派的所有容許的值...

再談Objective C中的BOOL型別

解釋乙個型別,最好的辦法就是看看它的定義 ifdef vxworks typedef int bool else undef bool typedef unsigned char bool endif define yes bool 1 define no bool 0 由上述定義,我們可以知道 1...

Objective C 定義的型別

以下列出的是objective c內建的型別集合 型別定義 id物件的引用 指向其資料結構的指標 class類物件的引用 指向其資料結構的指標 sel選標 編譯器分配用來區分方法名的編碼 imp指向方法實現的指標,該實現返回id bool布林值,yes or no nil空的物件指標,id 0 ni...