C 语言 - 扩展类型

更多数据类型

除了基本类型(intfloatdoublechar)之外,C 语言还提供了扩展关键字shortlongunsigned)来控制数值的大小或是否可以存储负数:

类型 大小* 范围(通常) 格式说明符
short int 2 字节 -32,768 到 32,767 %hd
unsigned int 2 或 4 字节
  • 0 到 65,535 (2 字节)
  • 0 到 4,294,967,295 (4 字节)
%u
long int 4 或 8 字节
  • -2,147,483,648 到 2,147,483,647 (4 字节)
  • -9,223,372,036,854,775,808 到 9,223,372,036,854,775,807 (8 字节)
%ld
long long int 8 字节 -9,223,372,036,854,775,808 到 9,223,372,036,854,775,807 %lld
unsigned long int 4 或 8 字节
  • 0 到 4,294,967,295 (4 字节)
  • 0 到 18,446,744,073,709,551,615 (8 字节)
%lu
unsigned long long int 8 字节 0 到 18,446,744,073,709,551,615 %llu
long double 8、12 或 16 字节 取决于实现,但精度高于 double %Lf

unsigned 意味着该类型只能存储非负值(0 及以上)。

* 注意:

这些类型的大小可能因系统而异(例如,2 或 4 字节,或 4 或 8 字节),具体取决于计算机是老式还是新式、32 位还是 64 位,以及所使用的编译器。

以下是创建和打印这些扩展类型的示例:

实例

int normalInt = 1000;                       // 标准 int
double normalDouble = 3.14;                  // 标准 double

short int small = -100;                      // 较小的 int
unsigned int count = 25;                     // 仅正数 int
long int big = 1234567890;                    // 较大的 int
long long int veryBig = 9223372036854775807;  // 非常大的 int
unsigned long long int huge = 18446744073709551615U; // 非常大,仅正数
long double precise = 3.141592653589793238L;  // 扩展精度

printf("Normal int: %d\n", normalInt);
printf("Normal double: %lf\n", normalDouble);
printf("Small: %hd\n", small);
printf("Count: %u\n", count);
printf("Big: %ld\n", big);
printf("Very Big: %lld\n", veryBig);
printf("Huge: %llu\n", huge);
printf("Precise: %Lf\n", precise);

亲自试一试

注意:这些扩展类型主要用于需要对内存使用或数值范围进行非常特定控制的情况。

注意:对于日常编程,intfloatdoublechar 通常就足够了。

检查大小

* 确切的大小取决于您的系统和编译器。请记住,您可以使用 sizeof 运算符来检查它们:

实例

printf("Size of int: %zu bytes\n", sizeof(int));
printf("Size of double: %zu bytes\n", sizeof(double));
printf("Size of short int: %zu bytes\n", sizeof(short int));
printf("Size of unsigned int: %zu bytes\n", sizeof(unsigned int));
printf("Size of long int: %zu bytes\n", sizeof(long int));
printf("Size of long long int: %zu bytes\n", sizeof(long long int));
printf("Size of unsigned long long int: %zu bytes\n", sizeof(unsigned long long int));
printf("Size of long double: %zu bytes\n", sizeof(long double));

亲自试一试

提示:当您确实需要对数值大小进行精确控制时,可以使用固定宽度类型,您将在后续学习到这些内容。

注意:本页仅向您展示 C 语言还有其他扩展类型,但在本教程中,我们将继续重点关注基本类型intfloatdoublechar)。