objectC 数据类型转换
按照數(shù)據(jù)類型占用存儲不同可以自動類型轉(zhuǎn)換或強(qiáng)制類型轉(zhuǎn)換,總的原則是小存儲容量數(shù)據(jù)類型可以自動轉(zhuǎn)換成為大存儲容量數(shù)據(jù)類型。
不同類型數(shù)據(jù)間按照下面關(guān)系的從左到右(從低到高)自動轉(zhuǎn)換,
_Bool、char、short int、枚舉類型 -> int ->long int->long long-> float -> double -> long double。
如果這些數(shù)據(jù)類型進(jìn)行混合運(yùn)算,運(yùn)算中不同類型的數(shù)據(jù)先轉(zhuǎn)化為同一類型,然后進(jìn)行運(yùn)算,轉(zhuǎn)換從左到右自動轉(zhuǎn)換,如表2-3所示。
表2-3 類型轉(zhuǎn)換先后順序表
| 操作數(shù)1類型 | 操作數(shù)2類型 | 轉(zhuǎn)換后的類型 |
| _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類型,結(jié)果是什么類型?
f * i + l /s
運(yùn)行結(jié)果為float類型,這是因為f是float其它的操作數(shù)與float運(yùn)算其結(jié)果就是float類型。
如果遵守類型轉(zhuǎn)換是右到左情況,就需要強(qiáng)制類型轉(zhuǎn)換了,強(qiáng)制類型轉(zhuǎn)換語法形式上很簡單,就是在數(shù)據(jù)前面加上(目標(biāo)類型),但是這種轉(zhuǎn)換是存在風(fēng)險的,有可能造成數(shù)據(jù)的丟失,需要謹(jǐn)慎進(jìn)行。例如:
???????? long int l = 6666666666;
???????? NSLog(@"l = %li",l);
???????? int i = (int)l;
???????? NSLog(@"i = %i",i);??
運(yùn)行的結(jié)果是,其中6666666666數(shù)值已經(jīng)超出了int類型的容量,因此出現(xiàn)了數(shù)據(jù)的丟失。
??? l = 6666666666
??? i = -1923267926
強(qiáng)制轉(zhuǎn)換有的時候嵌入在其它的表達(dá)式里面,它會與運(yùn)行的優(yōu)先級交織在一起,情況就會變的更加復(fù)雜,假設(shè)有下面的幾條語句:
int total = 3446;??
int n = 6;
float average = total / n;
運(yùn)行完成float的變量average結(jié)果是574,小數(shù)點內(nèi)容被截取掉了,如果我們采用下面的語句實現(xiàn):
int total = 3446;??
int n = 6;
float average = (float)total / n;
運(yùn)行完成float的變量average結(jié)果是574.333,這個數(shù)據(jù)要比上面計算的精確,這是因為(float)total先把int類型的total變量轉(zhuǎn)換成為float類型的total變量。
總結(jié)
以上是生活随笔為你收集整理的objectC 数据类型转换的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 梦到被毒蛇咬了什么意思周公解梦
- 下一篇: 梦到地震自己死了预示什么