880 likes | 996 Views
3. 基本資料型態. 能盡物之性,則可以贊天地之化育。 可以贊天地之化育,則可以與天地矣。 《 中庸 ﹒ 第二十一章 》. 基本資料型態. 3.1 整數和浮點數 3.2 變數和常數 3.3 算術運算 3.4 標準數學函數的運算 3.5 邏輯值及其運算 3.6 字元與字串 3.7 位元處理運算. C++ 的資料型態. 3.1 整數. 整數 (integer values) 是所有不具小數點的數值。例如: 6 -3728 0 +248571 -12 +0 005 4L.
E N D
3 基本資料型態 能盡物之性,則可以贊天地之化育。可以贊天地之化育,則可以與天地矣。 《中庸﹒第二十一章》
基本資料型態 • 3.1 整數和浮點數 • 3.2 變數和常數 • 3.3 算術運算 • 3.4 標準數學函數的運算 • 3.5 邏輯值及其運算 • 3.6 字元與字串 • 3.7 位元處理運算
3.1 整數 • 整數 (integer values) 是所有不具小數點的數值。例如: 6-37280+248571-12+00054L
long int、8進位整數、16進位整數和 unsigned int (不加正負號的整數) 48U // unsigned int 75UL // unsigned long 372L // long 75l // long (不建議使用,因為l和 1不易區分) 012 // 128 = 10 0x12 // 1216 = 18
浮點數(floating point numbers) • 帶有小數點的數值。 • 浮點數的例子如下: 36.0-7.382+3.92L0.00+4.03.7f3.7F
浮點數的指數表示法 (exponential notation) • e為exponent的縮寫,可以寫為E或e。
float 和 long double • 例如: 4.7 // double 48.0F // float 48.0f // float 3.75L // long double 4.26e12 // double 4.26e+12L // long double (+號可以省略) 4.26E-12 // double
3.2 變數和常數 • 變數 (variables) • 常數 (constants) • 所有的變數和常數都需要經由宣告 (declaration) 才能取用。
變數的宣告 • 賦予它一個名稱,並指定其所屬的資料形態。 • 例如: Int Age; float Height; • 上面這兩個敘述同時也完成了Age和Height兩個變數的定義 (definition)。
變數的定義 • 在記憶體內確實配置足夠容納變數的記憶空間。 • 對於變數和常數而言,宣告通常也附帶完成了定義。
short 和 long • 除了關鍵字int用來指定整數的資料型態外,short和long分別用來代表「短的整數資料」和「長的整數資料」。例如: long int Ia; long Ib; short int Ic; short Id;
float 和 double • 單精確度的浮點數和雙精確度的浮點數分別以 float 和 double 這兩個關鍵字宣告。例如: float Fa; // Fa 為單精確度的浮點數 double Db; // Db 為雙精確度的浮點數
程式 Average.cpp 執行結果
多重宣告 (multiple declarations) • float a, b; • 相當於下列二式: float a; float b;
變數c的宣告和初始化 • float c = 5.6;
常數(constant) 代號的用途 1.避免重複直接寫出數值,以減少輸入的錯誤。 2.可以只修改一處定義,就能同時改變程式中所有使用這個值的地方。
常數的例子 • const double TaxRate = 0.17; • const float Inch2Meter = 0.024; • const int Max = 1024;
常數 • 一旦被宣告為常數,則不能再是lvalue (左值),其內容不能更改。譬如: const int Max = 1024; Max = 2048;// 錯誤!常數不可以再給予 新值。
算術運算子(arithmetic operators) • 共有7個:
表達式(expression) • 將常數、變數或函數以各種運算子聯結起來的組合: x < 15.8 x = y + sin( z ) ( x + y ) * 0.8 – z
敘述句(statement) • C++ 程式裡面最小的可執行單元。例如: x = a + b * sin( c ) ; ; b++; y = ( b > 10.0 ) ; x = c + 5.0 ;
敘述句的規範 (1/2) 1.以分號當結尾。 2.可以任意放置。例如: x = a + b * ( c + 6.5 ) + c * 105.8 – 4.0; 與 x = a + b * ( c + 6.5 ) + c * 105.8 – 4.0;
敘述句的規範 (2/2) 3.各個數值或變數名稱與運算子 (operator) 之間的空隔可有可無。例如 x=a+b; 與 x = a + b;
指派敘述 (assignment statement) • 有等號的敘述: Value = expression; • 例如: x = a + b; 指派敘述的處理步驟 (1) 算出expression的值。 (2) 將此值放在Value裡面,成為它的內容。
運算元 (operand) 和運算子 (operator) • 在x * y這個運算裡,x和y稱為運算元 (operand),「*」稱為運算子 (operator)。
一元運算子 (unary operator) 和二元運算子 (binary operator) • 作用於兩個運算元之間的運算子稱為二元運算子,像 *, / 和 %這類的運算子都是。 • 如果只作用於一個運算元上,則稱為一元運算子,例如負號。
運算符號「-」 • 「-」既是一元運算子也是二元運算子。例如 -x用來計算x的負值。然而 x – y卻是用來計算x和y的差值。我們將它視為兩個不同的運算子。
算術運算的優先權和結合規則 • 與我們熟悉的「先乘除後加減」規則相吻合,也就是說: 6 + 4 * 8 % 3 * 6 - 5 與 6 + ((4 * 8) % 3) * 6 - 5 的計算順序是一樣的。
運算子的優先順序和結合關係 • 在同一個敘述內,當運算子的優先權相同時,則依照從左至右的順序處理。
整數的除法 • 在C++ 中,整數相除時,其餘數被直接捨棄。例如 1/2 得到 0 3/7 得到 0 15/2 得到 7
餘數運算子 (modulus operator) % 1%2 得到 1 3%7 得到 3 15%2 得到 1
累加運算子 (increment operator) 和累減運算子 (decrement operator)
當 ++ 或 -- 寫在操作元之前 (稱為字首,prefix)時 • M = ++i; 相當於 i = i + 1; M = i;
當 ++ 或 -- 寫在操作元之後 (稱為字尾,postfix) 時 • M = i++; 相當於: M = i; i = i + 1;
累加和累減運算 • M = i++ * 5; 相當於 M = i*5; i++; 而 M = ++i * 5; 則相當於 i++; M = i*5;
rvalue 和 lvalue 1. rvalue和lvalue分別為right value (右值) 和left value (左值) 的縮寫。 變數的值或表達式的計算結果稱為rvalue,因為它可以置於指派操作子等號「=」的右側。rvalue本身不可以被指定數值。 2. 經由compiler規劃過的記憶位置所儲存的內容稱為lvalue,因為它通常放在指派操作子的左側。它可以被指定存入某個數值。 3. 指派敘述可以視為把rvalue置入lvalue的操作。 例如,下列兩個敘述: 5 = x ; ( b = 10.0 ) = a ; 都是錯誤的敘述。
C++ 敘述的隱性資料型態轉換規則 1.如果混合不同的資料型態,則計算結果以最精確的資料型態為準。 2.當所有的運算元都具有相同的資料型態,計算結果不做型態轉換。 3.如果是指派運算 (assignment operation),則依lvalue的資料型態儲存。
C++ 的兩種顯式資料型態轉換語法 • (資料型態) 變數名稱;資料型態 (變數名稱); • 例如 x = float (a) + 3.8f ; 或是 x = (float) a + 3.8f ;
sizeof () 運算子 • 可以用來顯示資料所使用的記憶空間有幾個位元組。運算子sizeof()括號內的引數可以是資料,也可以是資料型態。
程式 Size.cpp 檢查資料型態的長度以及隱式資料轉換的效果