溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶(hù)服務(wù)條款》

objective-C 數(shù)據(jù)類(lèi)型轉(zhuǎn)換

發(fā)布時(shí)間:2020-07-30 06:59:06 來(lái)源:網(wǎng)絡(luò) 閱讀:1536 作者:驛落黃昏 欄目:移動(dòng)開(kāi)發(fā)

 按照數(shù)據(jù)類(lèi)型占用存儲(chǔ)不同可以自動(dòng)類(lèi)型轉(zhuǎn)換或強(qiáng)制類(lèi)型轉(zhuǎn)換,總的原則是小存儲(chǔ)容量數(shù)據(jù)類(lèi)型可以自動(dòng)轉(zhuǎn)換成為大存儲(chǔ)容量數(shù)據(jù)類(lèi)型。

不同類(lèi)型數(shù)據(jù)間按照下面關(guān)系的從左到右(從低到高)自動(dòng)轉(zhuǎn)換,

_Bool 、 char 、 short int 、枚舉類(lèi)型 -> int ->long int->long long-> float -> double -> long double 。

如果這些數(shù)據(jù)類(lèi)型進(jìn)行混合運(yùn)算,運(yùn)算中不同類(lèi)型的數(shù)據(jù)先轉(zhuǎn)化為同一類(lèi)型,然后進(jìn)行運(yùn)算,轉(zhuǎn)換從左到右自動(dòng)轉(zhuǎn)換,如表 2-3 所示。

表 2-3 類(lèi)型轉(zhuǎn)換先后順序表

操作數(shù) 1 類(lèi)型

操作數(shù) 2 類(lèi)型

轉(zhuǎn)換后的類(lèi)型

_Bool 、 char 、 short int 、枚舉類(lèi)型

int

int

_Bool 、 char 、 short int 、枚舉類(lèi)型、 int

long int

long int

_Bool 、 char 、 short int 、枚舉類(lèi)型、 int 、 long int

long long

long long

_Bool 、 char 、 short int 、枚舉類(lèi)型、 int 、 long int 、 long long

float

float

_Bool 、 char 、 short int 、枚舉類(lèi)型、 int 、 long int 、 long long 、 float

double

double

_Bool 、 char 、 short int 、枚舉類(lèi)型、 int 、 long int 、 long long 、 float 、 double

long double

long double

 

如果有下面的表示式,其中, f 是 float 類(lèi)型, i 為 int 類(lèi)型, l 為 long int 類(lèi)型, s 為 short int 類(lèi)型,結(jié)果是什么類(lèi)型?

f * i + l /s

運(yùn)行結(jié)果為 float 類(lèi)型,這是因?yàn)?nbsp;f 是 float 其它的操作數(shù)與 float 運(yùn)算其結(jié)果就是 float 類(lèi)型。

如果遵守類(lèi)型轉(zhuǎn)換是右到左情況,就需要強(qiáng)制類(lèi)型轉(zhuǎn)換 了,強(qiáng)制類(lèi)型轉(zhuǎn)換語(yǔ)法形式上很簡(jiǎn)單,就是在數(shù)據(jù)前面加上(目標(biāo)類(lèi)型),但是這種轉(zhuǎn)換是存在風(fēng)險(xiǎn)的,有可能造成數(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 類(lèi)型的容量,因此出現(xiàn)了數(shù)據(jù)的丟失。

    l = 6666666666

    i = -1923267926

強(qiáng)制轉(zhuǎn)換有的時(shí)候嵌入在其它的表達(dá)式里面,它會(huì)與運(yùn)行的優(yōu)先級(jí)交織在一起,情況就會(huì)變的更加復(fù)雜,假設(shè)有下面的幾條語(yǔ)句:

int total = 3446;  

int n = 6;

float average = total / n;

運(yùn)行完成 float 的變量 average 結(jié)果是 574 ,小數(shù)點(diǎn)內(nèi)容被截取掉了,如果我們采用下面的語(yǔ)句實(shí)現(xiàn):

int total = 3446;  

int n = 6;

float average = (float)total / n;

運(yùn)行完成 float 的變量 average 結(jié)果是 574.333 ,這個(gè)數(shù)據(jù)要比上面計(jì)算的精確,這是因?yàn)?nbsp;(float)total 先把 int 類(lèi)型的 total 變量轉(zhuǎn)換成為 float 類(lèi)型的 total 變量。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI