賦值中的型別轉換
當賦值運算子兩邊的運算物件型別不同時,將要發生型別轉換, 轉換的規則是:把賦值運算子右側表示式的型別轉換為左側變數的型別。具體的轉換如下:
(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型變數時, 內部儲存形式不變,但外部表示時總是無符號的。
/*例:賦值運算子舉例 */
main()
執行結果為:(unsigned)65535→(int)-1(int)-1→(unsigned)65535
● 計算機中資料用補碼表示,int型量最高位是符號位,為1時表示負值,為0時表示正值。如果乙個無符號數的值小於32768則最高位為0,賦給 int型變數後、得到正值。如果無符號數大於等於32768,則最高位為1, 賦給整型變數後就得到乙個負整數值。反之,當乙個負整數賦給unsigned 型變數時,得到的無符號值是乙個大於32768的值。
● c語言這種賦值時的型別轉換形式可能會使人感到不精密和不嚴格,因為不管表示式的值怎樣,系統都自動將其轉為賦值運算子左部變數的型別。
● 而轉變後資料可能有所不同,在不加注意時就可能帶來錯誤。 這確實是個缺點,也遭到許多人們批評。但不應忘記的是:c語言最初是為了替代組合語言而設計的,所以型別變換比較隨意。當然, 用強制型別轉換是乙個好習慣,這樣,至少從程式上可以看出想幹什麼。
賦值中的強制型別轉換
賦值中的型別轉換 當 賦值運算子兩邊的運算物件型別不同時,將要發生型別轉換,轉換的規則是 把賦值運算子右側 表示式的型別轉換為左側 變數的型別。具體的轉換如下 1 浮點型與 整型 將浮點數 單雙精度 轉換為整數時,將捨棄浮點數的小數部分 是直接捨棄,編譯器不會自動四捨五入 只保留整數部分。將 整型值...
matlab中強制型別轉換 型別轉換
上一期提到 隱式型別強制轉換 implicit type coercion 隱式型別強制轉換會造成意外。為了避免出現意外,c 提供了明式型別轉換,允許程式設計師通過使用型別轉換操作 cast operator 主動轉換資料的型別。型別轉換操作也可直接稱為型別轉換 type conversion ty...
C 中型別強制轉換
c 中有4種強制轉換 const cast,static cast,dynamic cast,reinterpret cast,以下將分別介紹 1.const cast 形式const cast expression 用來修改型別的const或volatile屬性,除了const或volatile修...