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

2022-08-31 12:06:08 字數 1535 閱讀 6579

例子:

#include

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);

輸出結果:aa

因為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碼區間進行資料丟失的,

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

c語言強制型別轉換

例子 include輸出結果 the char is p the short is 4464 the int is 70000 the float is 70000.000000 問題 為什麼float 型別的70000 轉成char型變成了 p 首先資料型別本質是什麼?底層硬體最小的儲存單元只有開...

C語言指標強制型別轉換

一 舉例說明 上圖對應函式呼叫為int printf const char fmt,fmt為char 指標型別,所以共佔了32位位元組,但是 fmt執行的是乙個位元組,fmt 執行的是下乙個位元組,fmt得到乙個32位位址,char fmt得到是乙個執行位元組的指標,char fmt 4後正好執行了...

C語言指標強制型別轉換

概要 c語言中,任何乙個變數都必須占有乙個位址,而這個位址空間內的0 1 就是這個變數的值。不同的資料型別占有的空間大小不一,但是他們都必須有個位址,而這個位址就是硬體訪問的依據,而名字只是提供給程式設計師的一種記住這個位址的方便一點的方法。但是,不同的變數在機器中都是0 1 所以,我們不能簡單的通...