程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> objective-C中的數據類型轉換

objective-C中的數據類型轉換

編輯:關於C語言

按照數據類型占用存儲不同可以自動類型轉換或強制類型轉換,總的原則是小存儲容量數據類型可以自動轉換成為大存儲容量數據類型。

不同類型數據間按照下面關系的從左到右(從低到高)自動轉換,

_Bool 、 char 、 short int 、枚舉類型 -> int ->long int->long long-> float -> double -> long double 。

如果這些數據類型進行混合運算,運算中不同類型的數據先轉化為同一類型,然後進行運算,轉換從左到右自動轉換,如表 2-3 所示。

表 2-3 類型轉換先後順序表

操作數 1 類型 操作數 2 類型 轉換後的類型 _Bool 、 char 、 short int 、枚舉類型 int int _Bool 、 char 、 short int 、枚舉類型、 int long int long int _Bool 、 char 、 short int 、枚舉類型、 int 、 long int long long long long _Bool 、 char 、 short int 、枚舉類型、 int 、 long int 、 long long float float _Bool 、 char 、 short int 、枚舉類型、 int 、 long int 、 long long 、 float double double _Bool 、 char 、 short int 、枚舉類型、 int 、 long int 、 long long 、 float 、 double long double long double

如果有下面的表示式,其中, f 是 float 類型, i 為 int 類型, l 為 long int 類型, s 為 short int 類型,結果是什麼類型?

f * i + l /s

運行結果為 float 類型,這是因為 f 是 float 其它的操作數與 float 運算其結果就是 float 類型。

如果遵守類型轉換是右到左情況,就需要強制類型轉換 了,強制類型轉換語法形式上很簡單,就是在數據前面加上(目標類型),但是這種轉換是存在風險的,有可能造成數據的丟失,需要謹慎進行。例如:

long int l = 6666666666;

NSLog(@"l = %li",l);

int i = (int)l;

NSLog(@"i = %i",i);

運行的結果是,其中 6666666666 數值已經超出了 int 類型的容量,因此出現了數據的丟失。

l = 6666666666

i = -1923267926

強制轉換有的時候嵌入在其它的表達式裡面,它會與運行的優先級交織在一起,情況就會變的更加復雜,假設有下面的幾條語句:

int total = 3446;

int n = 6;

float average = total / n;

運行完成 float 的變量 average 結果是 574 ,小數點內容被截取掉了,如果我們采用下面的語句實現:

int total = 3446;

int n = 6;

float average = (float)total / n;

運行完成 float 的變量 average 結果是 574.333 ,這個數據要比上面計算的精確,這是因為 (float)total 先把 int 類型的 total 變量轉換成為 float 類型的 total 變量。

本文出自 “驿落黃昏” 博客,請務必保留此出處http://yiluohuanghun.blog.51cto.com/3407300/1153588

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved