整數是編程中最常見的一種數據類型,C語言提供了多種整數類型,包括?short
、int
、long
?和?long long
,它們的主要區別在于存儲范圍和內存占用的大小。
本節將詳細講解這些整數類型的定義、特性、使用場景以及注意事項,幫助你全面理解它們在 C語言中的作用。
C語言整數類型(short,int,long,long long)詳解 https://xiecoding.cn/view/416.html
C語言中的整數類型
C語言的整數類型用于存儲整數值,可以是有符號的(signed,默認情況,包含正數、負數和零)或無符號的(unsigned,僅包含非負數)。每種類型的大小(以字節為單位)和取值范圍由 C標準和具體實現(編譯器、硬件平臺)共同決定。
以下羅列了四種主要的 C 語言整數類型:
short
:短整型,通常用于節省內存。int
:標準整型,是最常用的整數類型。long
:長整型,適用于需要更大范圍的場景。long long
:超長整型,提供最大的整數范圍(C99 引入)。
這些類型可以通過?signed
?或?unsigned
?修飾符調整,默認情況下是?signed
。接下來,我們將逐一深入探討。
C語言short(短整型)
short
?是一種較小的整數類型,通常占用 2 字節(16 位)。它的設計初衷是節省內存,適用于數據范圍較小的場景。
取值范圍
signed short
:-32,768 到 32,767(-215?到 215-1)unsigned short
:0 到 65,535(0 到 216-1)
實例
#include <stdio.h>int main(void) {short a = 30000;unsigned short b = 60000;printf("Signed short: %hd\n", a);printf("Unsigned short: %hu\n", b);return 0;
}
輸出結果:
Signed short: 30000 Unsigned short: 60000
注意,在格式化輸出時,short
?使用?%hd
(有符號)或?%hu
(無符號)。
C語言int(標準整型)
int
?是 C語言中最常用的整數類型,其大小通常與處理器的字長一致(如 32 位系統上是 4 字節,64 位系統上可能是 4 或 8 字節)。它是默認的整數類型,適合大多數通用場景。
取值范圍(假設 4 字節)
signed int
:-2,147,483,648 到 2,147,483,647(-231?到 231-1)unsigned int
:0 到 4,294,967,295(0 到 232-1)
實例
#include <stdio.h>int main(void) {int x = -1000000;unsigned int y = 4000000000U; // U 表示無符號常量printf("Signed int: %d\n", x);printf("Unsigned int: %u\n", y);return 0;
}
輸出結果:
Signed int: -1000000 Unsigned int: 4000000000
注意:無符號整數需要加后綴?U
,否則可能觸發編譯器警告。輸出時使用?%d
(有符號)或?%u
(無符號)。
C語言long(長整型)
long
?提供比?int
?更大的范圍,至少占用 4 字節,在某些 64 位系統上可能是 8 字節。它的具體大小因平臺而異,因此在跨平臺編程時需謹慎。
取值范圍(假設 4 字節):
signed long
:-2,147,483,648 到 2,147,483,647unsigned long
:0 到 4,294,967,295
若為 8 字節,則范圍擴展到 ±263?和 0 到 264-1。
實例
#include <stdio.h>int main(void) {long a = 1234567890L; // L 表示 long 常量unsigned long b = 4000000000UL;printf("Signed long: %ld\n", a);printf("Unsigned long: %lu\n", b);return 0;
}
輸出結果:
Signed long: 1234567890 Unsigned long: 4000000000
注意,long 類型的整數常量后加?L
?或?UL
,輸出使用?%ld
(有符號)或?%lu
(無符號)。
C語言long long(超長整型)
long long
?是 C99 引入的類型,至少占用 8 字節(64 位),用于需要極大數據范圍的場景,如科學計算或大文件處理。
取值范圍
signed long long
:-9,223,372,036,854,775,808 到 9,223,372,036,854,775,807(-263?到 263-1)unsigned long long
:0 到 18,446,744,073,709,551,615(0 到 264-1)
實例
#include <stdio.h>int main(void) {long long a = -9223372036854775807LL; // LL 表示 long long 常量unsigned long long b = 18000000000000000000ULL;printf("Signed long long: %lld\n", a);printf("Unsigned long long: %llu\n", b);return 0;
}
輸出結果:
Signed long long: -9223372036854775807 Unsigned long long: 18000000000000000000
注意,long long 類型的整數常量使用?LL
?或?ULL
?后綴,輸出用?%lld
(有符號)或?%llu
(無符號)。
類型大小與平臺的依賴性
整數類型的大小并非完全固定,C 標準只規定了最小范圍和相對關系:short
?≤?int
?≤?long
?≤?long long
。實際大小取決于編譯器和硬件。例如:
類型 | 32 位系統(字節) | 64 位系統(字節) |
---|---|---|
short | 2 | 2 |
int | 4 | 4(有時 8) |
long | 4 | 4 或者 8 |
long long | 8 | 8 |
你可以使用?sizeof
?操作符檢查具體大小
printf("Size of int: %zu bytes\n", sizeof(int));
使用場景與注意事項
- 選擇合適的類型:根據數據范圍選擇類型,避免浪費內存或溢出。例如,小計數器用?
short
,大文件偏移量用?long long
。 - 溢出風險:超出范圍會導致未定義行為。例如,
short
?從 32,767 加 1 可能變成 -32,768。 - 跨平臺兼容性:使用?
<stdint.h>
?定義的固定寬度類型(如?int32_t
)代替直接使用?int
?或?long
,以確保一致性。
總結
C語言的整數類型?short
、int
、long
?和?long long
?提供了從 16 位到 64 位的靈活選擇。通過理解它們的范圍、內存占用和使用場景,你可以在編程中做出更優決策。