C語言系列之強制類型轉換(一)


例子:

#include <stdio.h>

{

char cChar;   //字符型變量

short int iShort; //短整型變量

int ilnt;           //整形變量

float fFloat=70000;      //單精度浮點型

 

cChar=(char)fFloat;     //強制轉換賦值

iShort=(short)fFloat;    //

ilnt=(int)fFloat;           //

 

printf("the char is: %c\n",cChar);   // 輸出字符變量值

printf("the long is:%ld\n",iShort);      //輸出短整型變量值

printf("the int is: %d\n",ilnt);           //輸出整型變量值

printf("the float is:%f\n",fFloat);      //輸出浮點型變量值

 

 

return 0;                                      //返回值為0

 

 

}

 

輸出結果:

the char is: p

the long is: 4464

the int is;70000

the float is 70000.000000

 

 

問題一:

the char is: p

為什么將單精度浮點型轉換成字符型的時候輸出結果為p;

根據C語言的結構而言,字符型輸出方式可以用字符或者用ASCLL碼,如下圖所示

最簡單的例子如:

cChar1='a';

cChar2=97;

printf("%c/n",cChar1);

printf("%c/n",cChar2);

輸出結果:

a

a

因為a的ascll碼就是97;

重點:

ascll碼表一共有128位,當超過128位的時候,又重新開始。

例如例子中的數值為70000

70000/128=546余112;

由ascll碼表可知,第112位為p;

所以輸出結果為p

問題二

the long is: 4464

單精度浮點型轉換成短整型的時候為什么輸出為4464

我們知道短整型的區間為-32768至32767,兩者相減加1等於65536

為什么要加1,是因為還有一個整數0

重點:

同上;

短整型一共有65536位,當超過這么位數時,又重新開始

我們通過題目可以知道

70000-65536=4464

所以輸出結果為4464

總結

有高級別向低級別轉換,可能會出現數據丟失,這種丟失往往是按照一個一個區間進行丟失,

例如上面講到的有浮點型轉換成字符型的時候是按照ascll碼區間進行數據丟失的,

而浮點型轉換成短整型時是按照短整型的數據區間進行丟失的。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM