例子:
#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碼區間進行數據丟失的,
而浮點型轉換成短整型時是按照短整型的數據區間進行丟失的。
