C语言整数类型汇总(包含区别和取值范围)
C语言中的整型数据类型如下表所示。
举个简单的例子:
读者可能会好奇,为什么需要定义这么多不同类型的整数呢?
实际上,计算机通过晶体管的开关状态来记录数据。晶体管通常会被分为 8 个一组,我们称之为字节。由于晶体管只有两种状态,每个字节就可以拥有 2 的 8 次方种不同的状态。让每个状态对应一个数值,就可以表示 256 个不同的数值。
下图清楚地展示了不同晶体管状态和它们所表示的数值。

图 1 晶体管状态和表示的数值
即使如今存储资源更加丰富,但许多编程语言仍然延续了这个传统。它们都提供了许多数据类型供选择。在编写代码时,程序员通常可以预测需要使用的数值范围。因此,在处理数据时,可以从语言提供的类型中选择最合适的类型存储数据。
你可能想了解这些整型数据类型占用了多少字节,以及它们的具体数值范围。但很遗憾,我们无法准确地告诉你,因为 C语言标准没有规定这些数据类型的大小范围,具体的实现取决于编译器和平台。那么,我们应该如何知道在 Visual Studio 中各种整型数据类型可以表示的数值范围呢?
可以使用 sizeof 关键字测量。
如果测量 int 类型占用的字节数,可以按照以下方式编写代码:
注意,以下代码省略了 main 函数,只把其中重要的部分提取出来进行讲解,你在实际编写代码时,必须加上 main 函数。
下面的程序展示了如何使用 sizeof 来测量 C 语言中不同类型所占用的字节数。
现在,我们可以编写程序来检查 C语言中不同整型类型所占用的字节数。
接下来,我们将继续讨论各种数据类型能够表达的数值范围的具体细节。
为声明无符号整型,需要在整型前加上关键字 unsigned,例如:
下表中列出了无符号整型的数值范围。
声明:《C语言系列教程》为本站“54笨鸟”官方原创,由国家机构和地方版权局所签发的权威证书所保护。
类型名称 | C语言中的关键字 | 注 释 |
---|---|---|
字符型 | char | 用于表示很小的整数 |
短整型 | short | 用于表示不怎么大的整数 |
整型 | int | 可以表示生活中的一般整数 |
长整型 | long | 用于表示较大的整数 |
加长整型 | long long | 用于表示非常大的整数 |
char q = 5; short a = 10; short b, c = 99; long m = 102023; long n, p = 562131; long long x = 12233720; long long y, z = 92949685;
读者可能会好奇,为什么需要定义这么多不同类型的整数呢?
实际上,计算机通过晶体管的开关状态来记录数据。晶体管通常会被分为 8 个一组,我们称之为字节。由于晶体管只有两种状态,每个字节就可以拥有 2 的 8 次方种不同的状态。让每个状态对应一个数值,就可以表示 256 个不同的数值。
下图清楚地展示了不同晶体管状态和它们所表示的数值。

图 1 晶体管状态和表示的数值
要表示更大的数值范围就需要更多的晶体管。在 C语言刚刚发明的时代,计算机存储资源是非常宝贵且稀缺的。对于程序员来说,他们可能希望将存储区域“掰成两半”来使用。例如,如果只需要表示 0~100 的数字,那么一个字节就足够了,为什么要使用两个字节呢?这里涉及到二进制的知识,如果你对于二进制还不太了解,建议先学习二进制的内容。
即使如今存储资源更加丰富,但许多编程语言仍然延续了这个传统。它们都提供了许多数据类型供选择。在编写代码时,程序员通常可以预测需要使用的数值范围。因此,在处理数据时,可以从语言提供的类型中选择最合适的类型存储数据。
你可能想了解这些整型数据类型占用了多少字节,以及它们的具体数值范围。但很遗憾,我们无法准确地告诉你,因为 C语言标准没有规定这些数据类型的大小范围,具体的实现取决于编译器和平台。那么,我们应该如何知道在 Visual Studio 中各种整型数据类型可以表示的数值范围呢?
可以使用 sizeof 关键字测量。
sizeof测量大小
和 int 一样,sizeof 也是 C语言中的一个关键字。它由英语单词 size 和 of 组成,它的翻译意思是“大小”,可以测量 C语言中各种实体所占用的字节数。如果测量 int 类型占用的字节数,可以按照以下方式编写代码:
sizeof(int);该行代码返回 int 类型的字节数。我们可以使用 printf 函数将结果显示在控制台上。假设 sizeof 返回 int 类型的值,并在 printf 函数中使用占位符 %d 输出它。更准确的方法是使用 %zu 占位符。以下是测量 int 类型占用的字节数并在控制台上输出结果的代码。
printf("%d\n", sizeof(int));sizeof 关键字可以与类型、变量和常量一起使用:
- 与类型一起使用,用于测量类型占用的字节数;
- 与变量一起使用,用于测量变量类型占用的字节数;
- 与常量一起使用,用于测量常量类型占用的字节数。
注意,以下代码省略了 main 函数,只把其中重要的部分提取出来进行讲解,你在实际编写代码时,必须加上 main 函数。
下面的程序展示了如何使用 sizeof 来测量 C 语言中不同类型所占用的字节数。
int a; printf("sizeof int = %d\n", sizeof(int)); //测量类型占用的字节数 printf("sizeof a = %d\n", sizeof(a)); //测量变量类型占用的字节数 printf("sizeof 123 = %d\n", sizeof(123)); //测量常量类型占用的字节数
现在,我们可以编写程序来检查 C语言中不同整型类型所占用的字节数。
printf("sizeof char=%d\n", sizeof(char)); printf("sizeof short=%d\n", sizeof(short)); printf("sizeof int=%d\n", sizeof(int)); printf("sizeof long=%d\n", sizeof(long)); printf("sizeof long long=%d\n", sizeof(long long));在运行程序后,我们可以看到它输出的结果:
sizeof char=1
sizeof short=2
sizeof int=4
sizeof long=4
sizeof long long=8
接下来,我们将继续讨论各种数据类型能够表达的数值范围的具体细节。
整型的数值范围
每个整型类型的数值范围可参见下表。类 型 | sizeof大小 | 二进制位数 | 取值范围算式 | 数值范围 |
---|---|---|---|---|
char | 1 | 1x8=8 位 | -2^7 ~ 2^7-1 | -128 ~ 127 |
short | 2 | 2x8=16 位 | -2^15 ~ 2^15-1 | -32768 ~ 32767 |
int | 4 | 4x8=32 位 | -2^31 ~ 2^31-1 | -2147483648 ~ 2147483647 |
long | 4 | 4x8=32 位 | -2^31 ~ 2^31-1 | -2147483648 ~ 2147483647 |
long long | 8 | 8x8=64 位 | -2^63 ~ 2^63-1 | -9223372036854775808 ~ 9223372036854775807 |
无符号整型
无符号整型(unsigned int)是 C语言中的一种整数类型,用于存储非负整数。与有符号整型(int)不同,无符号整型只存储非负整数,因此其值域比有符号整型更大。为声明无符号整型,需要在整型前加上关键字 unsigned,例如:
unsigned int a;如果你确定你不会用到负数,则建议你使用 unsigned 关键字,表明该数据类型不带有符号位。由于不带符号位,原本留给符号位的二进制位可用来表示数值,因此可以有效地表示比有符号整型更大的值。
下表中列出了无符号整型的数值范围。
类 型 | sizeof大小 | 二进制位数 | 取值范围算式 | 数值范围 |
---|---|---|---|---|
unsigned char | 1 | 1x8=8 位 | 0 ~ 2^8-1 | 0 ~ 255 |
unsigned short | 2 | 2x8=16 位 | 0 ~ 2^16-1 | 0 ~ 65535 |
unsigned int | 4 | 4x8=32 位 | 0 ~ 2^32-1 | 0 ~ 4294967295 |
unsigned long | 4 | 4x8=32 位 | 0 ~ 2^32-1 | 0 ~ 4294967295 |
unsigned long long | 8 | 8x8=64 位 | 0 ~ 2^64-1 | 0 ~ 18446744073709551615 |
声明:《C语言系列教程》为本站“54笨鸟”官方原创,由国家机构和地方版权局所签发的权威证书所保护。