我們電腦一般而言,能夠處理的數字大小是有限的!
如果你輸入一個數字,讓電腦處理「破表」,那麼輸出的答案就不會正確
例如電腦只能接受20億以內的數值,你輸入兩個15億相加,就不會輸出正確的結果
至於電腦能夠處理的數值大小,和你提供給他的記憶體大小有關
也就是說,給予越多的記憶體,電腦能夠處理的數值大小就越大
所以,我們在程式中「宣告」一個變數
就是告訴電腦,我們這個變數,需要多大的記憶體來處理
而,宣告不同的「資料型態」,就代表著提供給這個數值不同的記憶體大小
至於資料型態,有以下幾種:

所以,如果你在程式裡面輸入「 int a; 」
就是代表,你宣告一個名字叫做 「a」 的變數在記憶體裡,
這個變數的資料型態是「int」 (integer)
這個變數在記憶體中占了 4 bytes
至於這個 4 bytes 的變數,到底可以承受多大的數值呢?
我們需要一些基本知識

【圖 1 】 《 1 bit 》
既然 1 bit 只能裝 「0」或「1」,那麼一共能裝幾種數字呢? 當然是兩種啦!
那麼 2 bit 可以裝「00」「01」「10」「11」,一共可以裝幾種數字呢?四種!
接著 3 bit 可能裝「000」「001」「010」「011」「100」「101」「110」「111」,共八種!
所以,我們可以歸納出,如果有 n 個 bit ,那麼他就可以裝 2 ^ n 種數字
( ex. 6 bits 可以裝 2 ^ 6 = 64 種數字 )

接著,1 byte 就是 8 bits
然後,4 bytes 就是 32 bits
那麼剛才的 4 byte 的記憶體大小,究竟能夠承受多大的數值呢?
所謂 4 bytes = 32 bits
所以一共能裝 2 ^ 32 種數字
但是注意,我們這邊只是說他能裝 2 ^ 32「種」數字,並不代表這個變數能夠承受的最大數值就是 2 ^ 32
要看你宣告的資料型態是什麼!
宣告 int (含負數的整數)
2 ^ 32 = 4294967296
不過由於我們將這個數字的「配額」一半分給負數了
所以能夠裝的數值是 ( -2147483648 ~ -1 , 0 ~ 2147483647 )
因此,「int a;」的「a」能夠接受的最大正數是2147483647,最大負數是-2147483648
(至於為什麼負數能承受的數值居然設計成比正數多呢?這是因為電腦正負數採用Two's complement表示法的緣故,有興趣的可以查詢相關資料)
另外,如果你確定宣告的變數不會動到負數,那麼你可以宣告一個沒有負數的變數,把負數的「配額」全部還給正數
宣告 unsigned int (不含負數的整數)
能夠裝的數值是( 0 ~ 4294967295 )
因此,「unsigned int a;」的「a」能夠接受的數值範圍是 0 ~ 4294967295
如果這邊能夠了解,相信你將來在寫程式對於「宣告變數和記憶體的關係」就能有所掌握了!