類型轉換是一種將變數從一種數據類型轉換為另一種數據類型的方法。 例如,如果要將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
類型。
上一篇:
Objective-C類型定義(typedef)
下一篇:
Objective-C日誌處理