今天起兩天,會介紹一下在C++裡面,每一個變數的叫法規則,他們在電腦裡面是怎麼樣儲存的。
經過了兩天的訓練,應該二進位不陌生吧!這些變數就是用二進位等等的方式儲存的,但每個變數又不太一樣啦,下面就來一一介紹。
在介紹變數的型態之前,我們可以先了解一下在C++中的基本資料型態(Basic data types)。
首先
第一種是: literal 它是一種被寫死的質 (例如之後會稍微講一下的 constant (常數) )
第二種是: variable 就是一個可以變動的質 (像是下面會提到的變數)
之前有稍微提到過,變數到底有那些東西,那我們一樣搬來那個表格:
【C++中有那些變數呢?- 整數部分】
Name | bytes |
---|---|
bool | 1 |
char | 1 |
int | 4 |
short | 2 |
long | 4 |
unsigned int | 4 |
unsigned short | 2 |
unsigned long | 4 |
我在第四天的時候有說過,宣告變數,就像是要跟一間餐廳訂位一樣,你需要先跟餐廳說你要預訂多少位置,餐廳才可以預留多少位置給你。
宣告這些變數的時候,就是在宣告這些位置,而後面那個bytes 就指的是你宣告的變數需要多少個位置。
一個 byte 會等於 八個bit
所以,拿 int 來舉例,他佔有 4 個bytes,也就是說他的bit會來到 32 bit 這麼多!
那一個bit 又是甚麼呢?
還記得上次我們談到的2進位嗎,它的其中一個數字就是一個 bit 啦!
例如: 0010 0010 其中每一個0還有1就是一個 bit!
那我們來詳細一點的介紹一下這些整數的變數吧!
為integer, 整數的縮寫
佔據 4 個 bytes = 32 bits
因為佔據了共 32 個 bits,所以它可以儲存的資料大小可以從 (-2^31) ~ (+2^31) - 1
可以想像成像上圖一樣的圖形。
在這邊就可以順便介紹其他的整數:
unsigned int :
它也占據了 4 個 bytes,但是它儲存的資料只有從0 ~ (2^32) - 1(也就是只有正數)
short :
它佔據了 2 個 bytes,所以它儲存的資料只有 int 的一半(-2^15 ~ + 2^15 - 1) (總共只有 16 bits)
long :
它跟 int 佔據了一模一樣的空間,(在32位元的編譯器中),因此可以儲存的範圍跟 int 一樣
在你很懷疑一個變數是多大的時候,你可以使用這個函式來確認它真正的大小。
要怎麼用?
#include<iostream>
using namespace std;
int main(){
cout << "int" << sizeof(int) << endl;
cout << "unsigned int" << sizeof(unsigned int) << endl;
cout << "short" << sizeof(short) << endl;
cout << "long" << sizeof(long) << endl;
return 0;
}
就會得到:
所以如果有疑惑就去做看看吧!
這邊這個函式庫,則可以查到一個變數的上下界
例如:
#include<iostream>
#include<climits>
using namespace std;
int main(){
cout << INT_MIN << ", " << INT_MAX << endl;
cout << endl;
cout << SHRT_MIN << ", " << SHRT_MAX << endl; //SHRT 是 short的簡稱
cout << endl;
cout << LONG_MIN << ", " << LONG_MAX << endl;
return 0;
}
可以得到 :
這個詞好像常被人提起,但是好像又不太知道甚麼意思吧!
我們直接丟個例子:
#include<iostream>
using namespace std;
int main(){
short numberA = 32765; // 32765 = 2^15 - 3;
int i = 0;
while (i < 10)
{
short numberB = numberA + i;
cout << numberA + i << " " << numberB << endl;
i++;
}
}
這時候,你會發現怎麼兩邊的數字怪怪的,明明numberA 跟 numberB 好像是長的一模一樣的東西,但是印出來的東西又是另外一個回事。
我們可以先關注是從哪裡開始改變的:
numberB 從 32767 + 1 後,變成了- 32768
疑,阿怎麼越加越小咧?
其實是因為這樣:
在整數中,最前面那個bit 是專門在處理正負號的,而short又只有 16 個 bits,所以當每個bit都塞滿的時候,再加 1 就會滿出來,變成負號了!
進位還有電腦裡面運作真的有點複雜,但都是必須要搞懂的小東西。
ps 媽媽真的不懂梗圖 & memes 在幹嘛。
1.https://read01.com/zh-tw/JDNzj6.html