###### tags: `FoShiShi` # 資料型態 ## What 資料型態是用來**定義一個變數的型態與範圍** 例:字串,整數,小數(浮點數) 定義的變數**必須待在規定的型態範圍內** 每個資料型態的性質也有所不同 :::success 就像你在跟別人描述一個物體的時候 你要**先說這個物體的範圍跟狀態是什麼** 他才會知道你在說什麼 ::: ## When 當你要 **輸入東西** 或是要 **拿各種資料拿來運算** 的時候 輸入的語法會在最下面講 ## How 這裡先給一些常用的資料型態 ### 各種資料型態 | 資料型態 | 位元組 | 型態範圍 | 表示狀態 | | ------------------ | ----- | ---------------------------------- | ------ | | int | 4 | $-2^{31}$ ~ $2^{31}-1$ | 整數 | | unsigned int | 4 | $0$ ~ $2^{32}-1$ | 非負整數 | | long long | 8 | $-2^{63}$ ~ $2^{63}-1$ | 整數 | | unsigned long long | 8 | $0$ ~ $2^{64}-1$ | 非負整數 | | bool | 1 | $true$ $or$ $false$ | 布林值 | | char | 1 | $-2^{7}$ ~ $2^{7}-1$ | 字元 | | float | 4 | $1.2*10^{-38}$ ~ $3.4*10^{38}$ | 浮點數 | | double | 8 | $2.2^*10^{-308}$ ~ $1.8^*10^{308}$ | 浮點數 | **整數**:就是**整數** **非負整數**:就是**不是負的整數** **布林值(boolean)**:**是(1)** 或 **否(0)** **字元(character)**:各種 **[拉丁符號](https://web.fg.tp.edu.tw/~anny/ASCII_table.htm)** **浮點數(floating-point number)**:就是**小數**(**點後可以是零**) --- ### 資料型態用法 當你要宣告一個變數的時候 可以這樣宣告: ```cpp= 資料型態名稱 變數名稱; 資料型態名稱 變數名稱 = ...; ``` 兩種方式的不同在於 第二種方式順便給了此變數一個初始值 `....`必須符合資料型態 例: ```cpp= int a = 1; long long b = 10; unsigned long long c = 100; float d = 1.414; double e = 3.14159; char f = 'A'; bool g = true; ``` :::warning **不能設兩個名稱一樣的變數** ::: :::info 直接使用**字元**(把字母直接拿來用)要用**單引號**框起來 像上面那樣 但如果本身就是字元,就可以直接使用 例: ```cpp= char chr = 'A'; char chr2 = chr; ``` ::: :::warning 當你**沒有給一個變數他裡面儲存的值是什麼**的時候 我們就**無法確切的知道它裡面到底是什麼** 就無法去使用他 ::: 例: ```cpp= int a; int b = 1; cout << b << endl; // 1 cout << a << endl; // 未知,因為尚未賦值 ``` --- ### 對於浮點數的額外提醒 `C++`在儲存數字的時候,會以二進位表示 所以在存十進位的浮點數時 **在進位轉換上可能會出現除不盡的情況**(就像`10/3 = 3.3333...` 會除不盡) 就會**導致儲存方面的錯誤** 有可能會出現很多看似荒謬的情況發生 例:`0.1 + 0.2` 不會等於 `0.3`(型態間的運算會在[`運算子`](https://chrislaiisme.github.io/FoShiShi/operators)那邊講) 浮點數在計算上會產生些許誤差 如果經過多次操作,誤差會更大 所以不要太過依賴`C++`中的浮點數 阿如果真的要用 **不要用`float`**,去用`double` 因為`float`的精準度只到點下3位 `double`到點下7位 --- ### 字串(淺談) 字串(`string`)是一種資料結構,不太算資料型態 但是我們很多地方都會用到 :::info 這裡先講個基本用法 我們可以**用`""`來包住一個字串** 我們就可以用它來做一些事情 例: ```cpp= cout << "AAA" << endl; ``` ::: 更多的用法我們會在 [**`字串`**](https://chrislaiisme.github.io/FoShiShi/string) 講義中講述 --- ### 輸入 跟輸出的語法差不多,只是**箭頭方向相反** 然後輸入的時候會**自動跳過空格跟換行** :::danger 因為輸入會自動跳過空格跟換行 所以不要寫 `cin >> endl;` 會爛掉 ::: ```cpp= int a; cin >> a; // 如果我們輸入 10 cout << a << endl; // 他就會輸出10 ``` --- ## 實際應用 ### 題目1 輸入一個整數,並把他輸出 :::spoiler solution 輸入用`cin` 輸出用`cout` 整數用`int, long long, ...` ```cpp= #include<iostream> using namespace std; int main() { int a; cin >> a; cout << a << endl; } ``` ::: ### 題目2 輸入一個字元,並把他輸出 :::spoiler solution 字元用`char` ```cpp= #include<iostream> using namespace std; int main() { char a; cin >> a; cout << a << endl; } ``` :::
×
Sign in
Email
Password
Forgot password
or
Sign in via Google
Sign in via Facebook
Sign in via X(Twitter)
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
Continue with a different method
New to HackMD?
Sign up
By signing in, you agree to our
terms of service
.