C語言中強制資料類型轉換的總結

來源:互聯網
上載者:User

● 字元型變數的值實質上是一個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型與1ong型 
● long型資料賦給int型變數時,將低16位值送給int型變數,而將高16 位截斷捨棄。(這裡假定int型佔兩個位元組)。 
將int型資料送給long型變數時,其外部值保持不變,而內部形式有所改變。 
(5) 不帶正負號的整數 
● 將一個unsigned型資料賦給一個佔據同樣長度儲存單元的整型變數時(如:unsigned→int、unsigned long→long,unsigned short→short) ,原值照賦,內部的儲存方式不變,但外部值卻可能改變。
● 將一個非unsigned整型資料賦給長度相同的unsigned型變數時, 內部儲存形式不變,但外部表格示時總是無符號的。 
/*例:賦值運算子舉例 */
main()
{ unsigned a,b;
  int i,j;
  a="65535";
  i="-1";
  j="a";
  b="i";
  printf("(unsigned)%u→(int)%d/n",a,j);
  printf("(int)%d→(unsigned)%u/n",i,b);
}
運行結果為:
(unsigned)65535→(int)-1
(int)-1→(unsigned)65535

● 電腦中資料用補碼錶示,int型量最高位是符號位,為1時表示負值,為0時表示正值。如果一個無符號數的值小於32768則最高位為0,賦給 int型變數後、得到正值。如果無符號數大於等於32768,則最高位為1, 賦給整型變數後就得到一個負整數值。反之,當一個負整數賦給unsigned 型變數時,得到的無符號值是一個大於32768的值。 
● C語言這種賦值時的類型轉換形式可能會使人感到不精密和不嚴格,因為不管運算式的值怎樣,系統都自動將其轉為賦值運算子左部變數的類型。 
● 而轉變後資料可能有所不同,在不加註意時就可能帶來錯誤。 這確實是個缺點,也遭到許多人們批評。但不應忘記的是:c面言最初是為了替代組合語言而設計的,所以類型變換比較隨意。當然, 用強制類型轉換是一個好習慣,這樣,至少從程式上可以看出想幹什麼。 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.