類型轉換
在 C 語言程序中,經常需要對不同類型的數據進行運算,為了解決數據類型不一致的問題,需要對數據的類型進行轉換。例如一個浮點數和一個整數相加,必須先將兩個數轉換成同一類型。C 語言程序中的類型轉換可分為隱式和強制類型轉換兩種。
隱式類型轉換
所謂隱式類型轉換指的是,系統自動將取值範圍小的數據類型轉換為數據取值範圍大的數據類型,它是由系統自動轉換完成的。例如,將 int 類型和 double類型的數據相加,系統會將 int類型的數據轉換為 double 類型的數據,再進行相加操作,具體示例如下:
int num1=12;
double num2=10.5;
num1+num2;
上述示例代碼中,由於 double 類型的取值範圍大於 int 類型,因此,將 int類型的 num1 與 double 類型的 num2相加時,系統會自動將 num1的數據類型由 int轉換為 double類型,從而保證數據的精度不會丟失。
強制類型轉換
所謂強制類型轉換指的是使用強制類型轉換運算符,將一個變量或表達式轉化成所需的類型,其基本語法格式如下所示:
(類型名)(表達式)
在上述格式中,類型名和表達式都需要用括號括起來,具體示例如下:
上述講解的兩種類型轉換,看起來簡單,但在使用時需要注意以下幾個細節:
(1)浮點型與整型
將浮點數(單雙精度)轉換為整數時,將捨棄浮點數的小數部分,只保留整數部分。將整型值賦給浮點型變量,數值不變,只將形式改為浮點形式,即小數點後帶若干個 0 。需要注意的是,賦值時的類型轉換實際上是強制的。
(2)單、雙精度浮點型
由於 C 語言中的浮點值總是用雙精度表示的,所以 float 型數據參與運算時只需要在尾部加 0 延長為 double 型數據。double 型數據轉換為 float 型時,會造成數據精度丟失,有效位以外的數據將會進行四捨五入。
(3)char型與 int型
將 int 型數值賦給 char 型變量時,只保留其最低 8 位,高位部分捨棄。將char 型數值賦給 int 型變量時, 一些編譯程序不管其值大小都作正數處理,而另一些編譯程序在轉換時會根據 char 型數據值的大小進行判斷,若值大於127,就作為負數處理。對於使用者來講,如果原來 char 型數據取正值,轉換後仍為正值。如果原來 char 型值可正可負,則轉換後也仍然保持原值,只是數據的內部表示形式有所不同。
(4)int型與 long型
long 型數據賦給 int 型變量時,將低 16 位值送給 int 型變量,而將高 16 位截斷捨棄。(這裡假定 int型佔兩個字節)。 將 int型數據送給 long型變量時,其外部值保持不變,而內部形式有所改變。
(5)無符號整數
將一個unsigned型數據賦給一個長度相同的整型變量時(如:unsigned→int、unsigned long→long, unsigned short→short) ,內部的存儲方式不變,但外部值卻可能改變。將一個非 unsigned整型數據賦給一個長度相同的 unsigned 型變量時, 內部存儲形式不變,但外部表示時總是無符號的。
求關注,求轉發,求支持!
想要學習的童鞋可以加群:564950050!
同時關注我們的微信公眾號:【輕鬆學C語言】