c 語言型別轉化

2021-06-16 06:53:35 字數 2268 閱讀 8894

● 字元型變數的值實質上是乙個8位的整數值,因此取值範圍一般是-128~127,char型變數也可以加修飾符unsigned,則unsigned char 型變數的取值範圍是0~255(有些機器把char型當做unsighed char型對待, 取值範圍總是0~255)。

● 如果乙個運算子兩邊的運算數型別不同,先要將其轉換為相同的型別,即較低型別轉換為較高型別,然後再參加運算,轉換規則如下圖所示。

double ←── float 高 ↑

long ↑

unsigned ↑

int ←── char,short 低

● 圖中橫向箭頭表示必須的轉換,如兩個float型數參加運算,雖然它們型別相同,但仍要先轉成double型再進行運算,結果亦為double型。 縱向箭頭表示當運算子兩邊的運算數為不同型別時的轉換,如乙個long 型資料與乙個int型資料一起運算,需要先將int型資料轉換為long型, 然後兩者再進行運算,結果為long型。所有這些轉換都是由系統自動進行的, 使用時你只需從中了解結果的型別即可。這些轉換可以說是自動的,但然,c語言也提供了以顯式的形式強制轉換型別的機制。

● 當較低型別的資料轉換為較高型別時,一般只是形式上有所改變, 而不影響資料的實質內容, 而較高型別的資料轉換為較低型別時則可能有些資料丟失。

賦值中的型別轉換

當賦值運算子兩邊的運算物件型別不同時,將要發生型別轉換, 轉換的規則是:把賦值運算子右側表示式的型別轉換為左側變數的型別。具體的轉換如下:

(1) 浮點型與整型

● 將浮點數(單雙精度)轉換為整數時,將捨棄浮點數的小數部分, 只保留整數部分。

將整型值賦給浮點型變數,數值不變,只將形式改為浮點形式, 即小數點後帶若干個0。注意:賦值時的型別轉換實際上是強制的。

(2) 單、雙精度浮點型

● 由於c語言中的浮點值總是用雙精度表示的,所以float 型資料只是在尾部加0延長為doub1e型資料參加運算,然後直接賦值。doub1e型資料轉換為float型時,通過截尾數來實現,截斷前要進行四捨五入操作。

(3) char型與int型

● int型數值賦給char型變數時,只保留其最低8位,高位部分捨棄。

● chr型數值賦給int型變數時, 一些編譯程式不管其值大小都作正數處理,而另一些編譯程式在轉換時,若char型資料值大於127,就作為負數處理。對於使用者來講,如果原來char型資料取正值,轉換後仍為正值;如果原來char型值可正可負,則轉換後也仍然保持原值, 只是資料的內部表示形式有所不同。

(4) int型與1on

g型

● long型資料賦給int型變數時,將低16位值送給int型變數,而將高16 位截斷捨棄。(這裡假定int型佔兩個位元組)。

將int型資料送給long型變數時,其外部值保持不變,而內部形式有所改變。

(5) 無符號整數

● 將乙個unsigned型資料賦給乙個佔據同樣長度儲存單元的整型變數時(如:unsigned→int、unsigned long→long,unsigned short→short) ,原值照賦,內部的儲存方式不變,但外部值卻可能改變。

● 將乙個非unsigned整型資料賦給長度相同的unsigned型變數時, 內部儲存形式不變,但外部表示時總是無符號的。

/*例:賦值運算子舉例 */

main()

執行結果為:

(unsigned)65535→(int)-1

(int)-1→(unsigned)65535

● 計算機中資料用補碼表示,int型量最高位是符號位,為1時表示負值,為0時表示正值。如果乙個無符號數的值小於32768則最高位為0,賦給 int型變數後、得到正值。如果無符號數大於等於32768,則最高位為1, 賦給整型變數後就得到乙個負整數值。反之,當乙個負整數賦給unsigned 型變數時,得到的無符號值是乙個大於32768的值。

● c語言這種賦值時的型別轉換形式可能會使人感到不精密和不嚴格,因為不管表示式的值怎樣,系統都自動將其轉為賦值運算子左部變數的型別。

● 而轉變後資料可能有所不同,在不加注意時就可能帶來錯誤。 這確實是個缺點,也遭到許多人們批評。但不應忘記的是:c面言最初是為了替代組合語言而設計的,所以型別變換比較隨意。當然, 用強制型別轉換是乙個好習慣,這樣,至少從程式上可以看出想幹什麼。

總結 1,用強制型別轉換是個好習慣

2  計算時,如果型別不同,自動轉為高精度型別;有時相同也要轉為高精度的,如 float 轉為double 的

3  賦值運算時,如果不同參照左邊的。

float ->int  捨去小數。

int ->char  保留低八位

long->int  只賦低八位

C語言型別自動轉化

如果你是想知道在乙個運算過程中運算的東西是不同型別的 你想搞清楚怎麼回事那麼你來對了地方 自動轉換 當同一表示式中各資料的型別不同時,編譯程式會自動把他們轉變成同一型別後計算 char int float double自左向右轉換 如下圖 注意第2個數字 1 說明b還是字元型 1byte 自動轉化只...

C 型別轉化

c 型別轉化 在理解c 型別轉換前,我們先回顧c語言中型別轉換。c風格的強制型別轉化很簡單,不管什麼型別轉換統統是 type b type a。但是c風格的型別轉換有不少的缺點,有的時候用c風格的轉換是不合適的,因為它可以在任意型別之間轉換,比如你可以把乙個指向const物件的指標轉換成指向非con...

c 型別轉化

資料型別轉換 隱式轉換 int age 10 double sum age int salary 150000 decimal money salary double speed 10.4f float minspeed float speed string num 123 int n int.pa...