基本数据类型
关键字 |
说明 |
存储大小(通常) |
取值范围(通常) |
示例 |
int |
声明整型变量 |
4字节(32位系统) |
-2,147,483,648 到 2,147,483,647 |
int count = 100; |
char |
声明字符型变量 |
1字节 |
-128 到 127 或 0 到 255 |
char grade = ‘A’; |
float |
声明单精度浮点数 |
4字节 |
±1.2e-38 到 ±3.4e38 (约6-7位有效数字) |
float pi = 3.14f; |
double |
声明双精度浮点数 |
8字节 |
±2.3e-308 到 ±1.7e308 (约15-16位有效数字) |
double precise = 3.1415926535; |
void |
表示"无类型" |
无 |
无 |
void func();或void *ptr; |
short |
短整型 |
2字节 |
-32,768 到 32,767 |
short temp = -10; |
long |
长整型 |
4或8字节(取决于系统) |
-2,147,483,648 到 2,147,483,647(4字节时) |
long population = 7800000000L; |
signed |
有符号类型(默认) |
同对应类型 |
同对应类型(包含负数) |
signed int balance = -1000; |
unsigned |
无符号类型 |
同对应类型 |
0 到对应类型最大值的两倍+1 |
unsigned int age = 25; |
详细说明
int (整型)
- 最常用的整数类型
- 默认是有符号的(signed)
- 大小通常为机器字长(32位系统4字节,64位系统通常也是4字节)
int counter = 0;
int temperature = -10;
char (字符型)
- 存储单个字符
- 实际上存储的是ASCII码值(整数)
- 可以用作小范围整数(-128到127)
char letter = 'B';
char newline = '\n';
float (单精度浮点)
- 存储小数
- 后缀’f’或’F’表示float常量
- 精度约6-7位十进制数字
float pi = 3.14159f;
float temperature = 98.6f;
double (双精度浮点)
- 更高精度的浮点数
- 默认浮点常量是double类型
- 精度约15-16位十进制数字
double precise = 3.141592653589793;
double distance = 1.496e8;
void (无类型)
- 三种主要用途:
- 函数不返回值:void func() {…}
- 函数无参数:int func(void) {…}
- 通用指针:void *ptr; (可指向任何类型)
void sayHello() {
printf("Hello\n");
}
short (短整型)
short daysInWeek = 7;
long (长整型)
- 比int大的整数类型(具体大小取决于系统)
- 后缀’l’或’L’表示long常量
long worldPopulation = 7800000000L;
signed/unsigned (有符号/无符号)
- 控制整数是否包含负值
- 默认是有符号的(signed)
- unsigned类型范围是0到对应signed类型正范围的两倍+1
signed int balance = -1000;
unsigned int age = 25;
类型修饰符组合
组合 |
说明 |
示例 |
unsigned short |
无符号短整型 |
unsigned short port = 80; |
unsigned long |
无符号长整型 |
unsigned long bigNum = 4000000000UL; |
long double |
扩展精度浮点 |
long double precise = 3.141592653589793238L; |
signed char |
有符号字符 |
signed char sc = -128; |
unsigned char |
无符号字符 |
unsigned char uc = 255; |
注意事项
平台依赖性
- 某些类型大小随平台变化(特别是long)
- 可用的<stdint.h>获取固定大小类型(int32_t等)
隐式类型转换
- 混合类型运算时会发生自动类型转换
- 小类型会提升为大类型
溢出行为
- 有符号整数溢出是未定义行为
- 无符号整数溢出是取模行为
字面量后缀
- U/u:unsigned (如10U)
- L/l:long (如100000L)
- F/f:float (如3.14f)
- LL/ll:long long (如10000000000LL)