型別轉換是一種將變數從一種資料型別轉換為另一種資料型別的方法。 例如,如果要將long
值儲存到簡單整數(int
)中,則可以將long
型別轉換設定為int
。使用強制轉換運算子將值從一種型別轉換為另一種型別,如下所示 -
(type_name) expression
在Objective-C中,通常使用CGFloat
進行浮點運算,它是在32
位情況下從基本型別的float
派生的,在64
位情況下是double
型別。參考以下範例,使用轉換運算子將一個整數變數除以另一個整數變數,結果為浮點數 -
#import <Foundation/Foundation.h>
int main() {
int sum = 17, count = 5;
CGFloat mean;
mean = (CGFloat) sum / count;
NSLog(@"Value of mean : %f\n", mean );
return 0;
}
執行上面範例程式碼,得到以下結果:
2018-11-15 09:25:04.889 main[28822] Value of mean : 3.400000
這裡應該注意,強制轉換操作符優先於除法,因此sum
的值首先轉換為double
型別,最後除以count
,得到double
型別的值。
型別轉換可以是隱式的,由編譯器自動執行,也可以通過使用轉換運算子顯式指定。每當需要型別轉換時,使用強制轉換運算子是一種很好的程式設計習慣。
整數提升是將整數型別「小於」 int
或unsigned int
的值轉換為int
或unsigned int
的過程。 考慮在int
中新增字元的範例 -
#import <Foundation/Foundation.h>
int main() {
int i = 17;
char c = 'c'; /* ascii value is 99 */
int sum;
sum = i + c;
NSLog(@"Value of sum : %d\n", sum );
return 0;
}
當執行上面範例程式碼時,得到以下結果:
2018-11-15 09:28:10.138 main[110351] Value of sum : 116
這裡,sum
的值將變為116
,因為編譯器進行整數提升,並在執行加法運算之前將字元'c'
的值轉換為ascii
值。
隱式執行通常的算術轉換以將它們的值轉換為通用型別。編譯器首先執行整數提升,如果運算元仍然具有不同的型別,則它們將轉換為在以下層次結構中顯示最高的型別 -
通常的算術轉換不是為賦值運算子執行,也不是為邏輯運算子&&
和||
執行。下面看一個例子來理解這個概念 -
#import <Foundation/Foundation.h>
int main() {
int i = 17;
char c = 'c'; /* ascii value is 99 */
CGFloat sum;
sum = i + c;
NSLog(@"Value of sum : %f\n", sum );
return 0;
}
執行上面範例程式碼,得到以下結果:
2018-11-15 09:28:10.138 main[110351] Value of sum : 116
在這裡,很容易理解第一個c
字元被轉換為整數,但是因為最終值是float
,所以通常的算術轉換適用,編譯器將i
和c
轉換為float
並相加,所以最終產生的是float
型別。