2.1.2節可以說僅涉及到帶符號型別與無符號型別的轉換
如下面**中 u + i3 ,表示式中既有帶符號型別又有無符號型別,帶符號數會自動地轉換成無符號數。即 i3 轉換成 4294967254 ,與 u 相加結果為 4294967264。其結果與先進行計算 即 10 +(-42)= -32,
再將(-32)取模所得結果一致。
unsinged u = 10, u2 = 42;
std::cout
<< u2 - u << std::endl; //結果為32
std::cout
<< u - u2 << srd::endl; //結果為4294967264
int i = 10, i2 = 42, i3 = -42;
std::cout
<< i2 - i << std::endl; //結果為32
std::cout
<< i - i2 << std::endl; //結果為-32
std::cout
<< i - u << std::endl; //結果為0
std::cout
<< u - i << std::endl; //結果為0
std::cout
<< u + i3 << std::endl; //結果為4294967264
std::cout
<< i - u2 << std::endl; //結果為4294967264
std::cout
<< u2 + (-i) << std::endl; //結果為32
std::cout
<< -i - u2 << std::endl; //結果為4294967244
std::cout
<< -i - i2 << std::endl; //結果為-52
資料型別轉換的原則及注意問題
一、兩條自動轉換原則和一條強制性轉換原則。
設:x為短整型(2b),y單精度型(4b),z為字元型(1b)。
1、表示式計算中資料型別的自動轉換原則
參加運算的各個資料都轉換成長度最長的資料型別。結果為資料長度最長的資料型別。例如:
① x+y x先自動轉換成單精度型,後計算x+y,結果為單精度型;
② x+z z先自動轉換成短整型,後計算x+z,結果為短整型。
2、把運算結果賦給變數時資料型別的自動轉換原則
先將運算結果的資料型別自動轉換成變數的資料型別,然後賦給變數。例如:
① y=x+z x+z運算結果為短整型,自動轉換成單精度型,再賦給變數 y.
② x=y+z y+z運算結果為單精度型,自動轉換成短整型,再賦給變數 x.
3、運算結果的強制性資料型別轉換原則
強制性資料型別轉換格式:(資料型別符)(表示式)
先按自動轉換原則計算表示式的值,後將其轉換成指定的資料型別。
僅當表示式是單個常量或變數時,表示式括號可省略。例如:
①(float)x 對 x 的值強制轉換成單精度;
②(float)x+m 先對 x 的值強制轉換成單精度,後再和 m 進行加運算;
③(float)(x+m) 先計算(x+m),後把(x+m)的值強制轉換成單精度。
二、型別轉換的注意問題
1、表示式的型別轉換是臨時的,式中的常量或變數的原型別均不改變。
2、把運算結果賦給變數時,若運算結果的資料長度 > 變數的資料長度,會截去超長部分,
將可能導致精度降低或產生不確定的值。
3、型別轉換占用系統時間,過多的轉換會降低程式執行效率。除必要的外,應選擇合適的資料型別。
main()
練習2.8:請利用轉義序列編寫一段程式,要求先輸出2m,然後轉到新一行。修改程式使其先輸出2,然後輸出製表付,再輸出m,最後轉到新一行。
#include
int mian()
C primer學習日記 第3章習題
3.2從標準輸入中一次讀入一整行。修改程式使其一次讀入乙個詞 include include intmain32 3.4讀入兩個字串,比較是否相等並輸出結果。改寫程式,比較字串長度是否相等。比較字串大小 include include intmain 比較字串長度 include include i...
C Primer 學習筆記 1 基本語言
std endl 注意 效果不僅僅是換行,還會重新整理緩衝區,以便立即看到結果。在debug過程中的log應該每句都用endl重新整理緩衝區,避免因崩潰導致的緩衝區資訊丟失,造成除錯誤導。ms dos視窗中輸入ctrl z來輸入檔案結束符 注意 在一些簡短的小測試程式中,經常會用while std ...
C Primer學習筆記一 基本入門
g 獲得程式狀態 記住 和 返回的結果都是左運算元,也就是輸入流和輸出流本身。endl 這是乙個被稱為操縱符 manipulator 的特殊值,效果是結束當前行,並將裝置關聯的緩衝區 buffer 中的內容刷到裝置中。unix和mac下鍵盤輸入檔案結束符 ctrl d,windows下 ctrl z...