---
tags: 初階班
---
C++的內建資料型態包含整數、浮點數、字元和邏輯型態,以下將一一介紹
# 宣告
C++為強型別語言,因此**所有變數使用前都需要經過宣告**
宣告的意義就是讓電腦知道你現在要用這個變數了
# 整數型態
| 整數型態 | 數值範圍 | 表示為2的次方 |位元組|
|:------------------------|:------------------------ |:---------------------------------------------------------- |:---------------------- |
| short | -32678 ~ 32767 | $-2^{15}$ ~ $2^{15}-1$ |2|
| unsigned short | 0 ~ 65535 | $0$ ~ $2^{16}-1$ |2|
| $int$ | $-2,147,483,648$ ~ $2,147,483,647$ | $-2^{31}$ ~ $2^{31}-1$ |4|
| unsigned int | 0 ~ 4,294,967,295 | $0$ ~ $2^{32}-1$ |4|
| $long$ $long$ | $-9,223,372,036,854,775,808$ ~ $9,223,372,036,854,775,807$ | $-2^{63}$ ~ $2^{63}-1$ |8|
| $unsigned$ $long$ $long$ | $0$ ~ $18,446,744,073,709,551,615$ | $0$ ~ $2^{64}-1$ |8|
其中 $int$,$long$ $long$,$unsigned$ $long$ $long$ 較常使用
# 浮點數型態
| 浮點數型態 | 數值範圍 |位元組|
| ---------- | ---------------------------------- |-|
| double | $-1.7\times10^{308}$ ~ $1.7\times10^{308}$ |8|
| float | $-3.4\times10^{38}$ ~ $3.4\times10^{38}$ |4|
因為小數點精度問題,**<font color="#f00">盡量不要用float</font>**
:::warning
注意:當數字≥999999.5(約$10^7$)時,使用double將會捨棄後方幾位的數並轉成用 $e$ ($10$的次方)表示
如$100000000$➙$1\times10^8$➙顯示$1e+008$、$50000000123$➙$5\times10^{10}$➙顯示$5e+010$
:::
# 字元型態
| 字元型態 | 宣告功能 | 範例 |位元組|
| -------- | -------- |:------------------------- |-|
| char | 宣告字元 | `char c = 'C';`、`char a = 32;` |1|
`char c=32;`是以ascii(十進制)碼運作,詳細可參考[ascii維基](https://zh.wikipedia.org/zh-hk/ASCII)
# 邏輯型態
| 邏輯型態 | 宣告功能 | 數值範圍 |位元組|
| -------- | -------- | ------------------- |-|
| bool(布林值) | 邏輯變數 | true(1) 或 false(0) |1|
# 變數宣告
宣告方式為 `變數型態` `變數名稱`,若要宣告多個同型態的變數,中間可用`,`隔開
## 數字&字元
```cpp=
#include <iostream>
using namespace std;
int main(){
int a; //變數型態 變數名稱
long long l;
char c;
double d = 0.5; //宣告同時賦值為0.5
cin >> a >> l >> c; //輸入變數(賦予變數a與b數值)
cout << a << '\n' << l << '\n' << c << '\n' << d; //輸出a, l, c, d變數
return 0;
}
```
輸入
```
5 3 a
```
輸出
```
5
3
a
0.5
```
在輸入兩個以上變數時,每個變數之間的輸入需使用空白或換行隔開
已使用過的變數不得重複宣告
此外,變數名稱中不能有空格(但可以有底線`_`)、有數字的話不能放在最前面(`int n1`可以,`int 1n`不行)、也不可以是C++保留字(例:`max`,`min`,`new`,`default`...等),然後大寫和小寫字母視為不同變數
:::warning
如果是要記錄sum值,如:
```cpp=
int sum;
for(int i = 0; i < 10; i++)
sum += i;
```
**<font color="#f00">請把變數設初始值</font>**
```cpp=
int sum = 0; //sum值設為0
for(int i = 0; i < 10; i++)
sum += i;
```
這很重要!
雖然某些編譯器上會自動將沒有設置初始值的變數設為0,但是在judge系統上不一定會自動設初始值為0。
導致在編譯器上執行結果正常,但是judge端會出現錯誤。
:::
## bool
`0`為`False`,非`0`的數皆為`True`
```cpp=
#include <iostream>
using namespace std;
int main(){
bool a = true, b = 1, c = -1461 , d = 6154;
bool e = false, f = 0;
cout << a << '\n'; //輸出1
cout << b << '\n'; //輸出1
cout << c << '\n'; //輸出1
cout << d << '\n'; //輸出1
cout << e << '\n'; //輸出0
cout << f << '\n'; //輸出0
return 0;
}
```
## 補充
### 全域變數
全域變數就是宣告在`int main()`之上的變數,他會在程式**編譯**時就被宣告好(相對於宣告在`main()`裡面的,稱為區域變數,區域變數在**執行**時才會宣告)
其他使用都和區域變數一樣
其中全域變數有幾個特性,例如他不須被初始化就會自己初始化好(整數型態初始化成0、小數型態初始化成0.0、字元型態初始化成'\0'(空字元)、bool型態初始化成false)