型別轉換表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)寫成(int)x+y 則成了把x 轉換成int 型之後再與y 相加了。另外,無論是強制轉換或是自動轉換,都只是為了本次運算的需要而對變數的資料長度進行的臨時性轉換,而不改變資料宣告時對該變數定義的型別。(int) (x+y) //把x+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...