c語言強制型別轉換

2021-08-22 15:14:49 字數 771 閱讀 8881

例子:

#include
輸出結果:

the char is: p

the short is: 4464

the int is;70000

the float is 70000.000000

問題:為什麼float 型別的70000 轉成char型變成了 p

首先資料型別本質是什麼?底層硬體最小的儲存單元只有開\關兩種狀態,對應乙個資料中就是乙個bit 。 bool資料型別就占用乙個bit空間,因為它只有是或否兩種狀態,但是我們大千世界有太多太複雜的東西需要處理,在硬體條件不變的情況下,我們只有通過更多的這種開關原件組合來表示更多的資訊,因此設計程式語言的人就根據實際把資料分出來了char、int、double等型別,所以:資料型別的本質是固定大小記憶體塊的別名。char佔的記憶體是乙個位元組,也就是8bit,而70000的二進位制表示是10001000101110000  char面對這個,只能按照自己的能力取了低8位來解釋,所以就是01110000 就是112 在ascii碼中就是p;

同理 short 佔兩個位元組 就是16bit 取低16位解釋 結果也就是4464。

重點:在開發中涉及資料賦值的時候,一定要注意資料的最大範圍,把乙個超過乙個型別最大容量的數賦值給該型別的變數,這將存在著不確定的隱患,乙個細心的有經驗的工程師應該要避免寫出存在這樣的隱患的**。

附:

C語言指標強制型別轉換

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

C語言指標強制型別轉換

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

C語言指標強制型別轉換

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