# 基本內建型態
C\++是一種強型別語言,**不像python和javascript是弱型別語言**(聽懂了嗎,學C\++最棒了),因此C\++所有的變數都必有型別(type),且<font color="#EB6E41">所有變數使用前都需要經過宣告</font>。
:::warning
基本內建型別是不需要任何標頭檔和命名空間就可以使用的指令。
:::
## 整數型態
| 整數型態 | 數值範圍 | 表示為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|
:::warning
因為小數點精度問題,盡量不要用float。
當數字≥999999.5(約$10^7$)時,使用`double`將會捨棄後方幾位的數並轉成用 $e$ ($10$的次方)表示。(ex.$100000000$➙$1\times10^8$➙顯示$1e+008$、$50000000123$➙$5\times10^{10}$➙顯示$5e+010$)
:::
## 字元型態
| 字元型態 | 宣告功能 | 數值範圍 |位元組|
| -------- | -------- |:------------------------- |-|
| char | 宣告字元 | $-128$ ~ $127$ |1|
## 邏輯型態
| 邏輯型態 | 宣告功能 | 數值範圍 |位元組|
| -------- | -------- | ------------------- |-|
| bool | 邏輯變數 | $true(1)$ 、 $false(0)$ |1|
# 變數宣告
在使用變數之前,要先告訴電腦我們要用變數,電腦會準備記憶體中間儲存該變數,若沒有宣告它的資料型態或搞錯資料型態,都有可能會出現無法編譯的情況。
## 宣告語法
```cpp=
#include<iostream>
using namespace std;
int main(){
//正確
int a, b ; //多個變數時中間以逗點隔開。
int A ; //大寫和小寫字母視為不同變數。
int b ; //已使用過的變數不得重複宣告。
int c = 20 ; //宣告同時賦值。
//錯誤
int n ; //全形,跑不了,必須是半形。
int return //變數名稱不能是保留字。
//比較
int 1n //變數名稱數字不可在前。
int n1 //但可以在後。
int chrislai is god //變數名稱中不能有空格。
int chrislai_is_god //但可以用底線。
return 0;
}
```
:::warning
雖然某些編譯器上會自動將沒有設置初始值的變數設為0,但是在judge系統上不一定會自動設初始值為0,導致在編譯器上執行結果正常,但是judge端會出現錯誤。
以記錄總和為例。
```cpp=
int sum = 0; //sum值設為0
for(int i = 0; i < 13; i++){
sum += i;
}
```
:::
## 全域變數
指宣告在`int main()`之上的變數,在程式<font color="#EB6E41">**編譯**</font>時就被宣告好(宣告在`main()`裡面的稱為區域變數,在<font color="#EB6E41">**執行**</font>時才會宣告),其他使用都和區域變數一樣。
全域變數有幾個特性,例如不須被初始化就會自己初始化好(整數型態初始化成`0`、小數型態初始化成`0.0`、字元型態初始化成`'\0'`(空字元)、邏輯型態初始化成`false`)。
# 例題
###### 有什麼題目沒提到或有新增的煩請留言告知。
[a313: 喔耶 水題](https://dandanjudge.fdhs.tyc.edu.tw/ShowProblem?problemid=a313) ( <font color="#EB6E41"> 這題被歸在這是因為它符合本課教學(不然都沒有例題),但現階段你們不能 **<font color="#00FF00">AC</font>** ,真的別寫,我不想被罵,他要優化再優化。</font> )
###### 都看到這了難道不按個愛心支持一下嗎?