在許多語言中變數並沒有什麼資料型態 (data type)之分, 只要您宣告了變數, 該變數可以儲存字串, 字元, 數字和浮點數. 但是在C++中 (C++系的語言也是), 變數是有類別之分, 如果嘗試將一個不同資料型態的數值指定給一個變數, 就可能會產生編譯器錯誤 (Compiler Error, 指在程式編譯時發生的錯誤) 或是 資料流失.
C++中的資料型態有很多, short, long, int, char, float, double, byte, bool等, 避免混淆, 本篇先針對int, char, double與bool幾種介紹與示範.
以下是四個變數的資料:
資料型態 | 說明 |
int | 即Integer, 整數之意. 只能存取整數. 如: 1, 3, 1000, 5000 這些都是可以使用的整數值. |
double | 其實和float差不多, 即浮點數(小數). 如: 3.14, 1.1, 999.99 這些都是可以使用的浮點數值. |
char | Character, 即字元. 只能儲存單字元, 如: a, B, C, D (注意大小寫有差), 只能存一個喔! 現在各家的編譯器都沒有統一的字串變數, 因此要儲存超過一個字元 (如: "Computer") 您可能要另外找函式庫. |
bool | Boolean (布林), 只能儲存"真"或是"偽", 其實也就是1與0, 是與否. |
C++的宣告方法與其他語言並沒有多大的差異:
double computer
這就是一個叫computer的浮點變數
試試看下面這段程式碼:
#include <iostream> using namespace std; int main() { int computer = 1024; double RAM = 64.64; char Jump = 'a'; bool Humvee = true; } |
上面這段程式宣告了以下變數:
一個叫做computer的整數, 其初始數值為1024.
一個叫做RAM的浮點數, 其初始數值為64.64.
一個叫做Jump的字元, 其初始數值為'a'. ( 字元必須用單引號包起來!!)
一個叫做Humvee的布林值, 其初始數值為"真".
初始(initialize) 就是指定一個數值給變數, 沒有初始的變數則會得到一個隨機的數值.
將程式再改一下, 加上輸出:
#include <iostream> using namespace std; int main() { int computer = 1024; double RAM = 64.64; char Jump = 'a'; bool Humvee = true; cout << computer << endl; cout << RAM << endl; cout << Jump << endl; cout << Humvee << endl; } |
編譯之後應該會看到以下輸出:
1024
64.64
a
1
布林的"真"是用1代表, "偽"則是用0代表, 應該沒有什麼問題吧? ( 若bool Humvee = false; 輸出則為0)
接下來我們要討論一下不同的資料種類傳遞的問題, 如今天有一浮點數要傳遞給整數變數, 會發生什麼事情呢?
這段程式碼:
double number = 3.6;
int another_number = number;
another_number整數在程式執行完畢以後的數值是3, 因為任何小數點後的數字都會自動被刪除, 不會四捨五入.
如果將char轉成int, 那int變數的數值將會是char字元的ASCII數值.
ASCII的全名是 美國資訊交流標準碼 (merican Standard Code for Information Interchange), ASCII字元表如下:
32 | 33 | ! | 34 | " | 35 | # | 36 | $ | 37 | % | |
38 | & | 39 | ' | 40 | ( | 41 | ) | 42 | * | 43 | + |
44 | , | 45 | - | 46 | . | 47 | / | 48 | 0 | 49 | 1 |
50 | 2 | 51 | 3 | 52 | 4 | 53 | 5 | 54 | 6 | 55 | 7 |
56 | 8 | 57 | 9 | 58 | : | 59 | ; | 60 | < | 61 | = |
62 | > | 63 | ? | 64 | @ | 65 | A | 66 | B | 67 | C |
68 | D | 69 | E | 70 | F | 71 | G | 72 | H | 73 | I |
74 | J | 75 | K | 76 | L | 77 | M | 78 | N | 79 | O |
80 | P | 81 | Q | 82 | R | 83 | S | 84 | T | 85 | U |
86 | V | 87 | W | 88 | X | 89 | Y | 90 | Z | 91 | [ |
92 | \ | 93 | ] | 94 | ^ | 95 | _ | 96 | ` | 97 | a |
98 | b | 99 | c | 100 | d | 101 | e | 102 | f | 103 | g |
104 | h | 105 | i | 106 | j | 107 | k | 108 | l | 109 | m |
110 | n | 111 | o | 112 | p | 113 | q | 114 | r | 115 | s |
116 | t | 117 | u | 118 | v | 119 | w | 120 | x | 121 | y |
122 | z | 123 | { | 124 | | | 125 | } | 126 | ~ |
這也是為什麼強調char的字元大寫與小寫有差, 如果將char轉成int的時候, 出來的ASCII數值就不一樣了. 反過來, 也可以用數字的方式指定一個數值給char變數, 如:
char character = 97;
character所得到的數值就是小寫的'a'
部分變數轉換與運算關係:
int轉double, double會完全繼承int所含的整數
double轉int, 所有小數點後的位數都會被移除
char轉int, int會得到char的ASCII數字值
int轉char, char會得到ASCII對應的字元
double除以int, 出來的答案的資料型態的是double, 3.3/1 = 3.3
int除以double, 出來的答案的資料型態的是double, 10/3.0 = 3.3333333333333
int除以int, 出來的答案的資料型態的是int, 10/3 = 3 (不是3.3333333)
本文章全文改自:http://www.study-area.org/coobila/tutorial_412.html
留言列表