基本数据类型
基本数据类型由 11 个关键字组成:int、long、short、unsigned、char、float、double、signed、_Bool、_Complex 和 Imaginary。
- 有符号整型
类型 | 长度 |
---|---|
int | 至少占 16 位(根据硬件选择合适大小,32位,64位编译器 int 为32位) |
short 或 short int | 至少占 16 位,最大 short 小于或等于 int 最大类型整数 |
long 或 long int | 至少占 32 位,大于或等于最大 int 类型整数 |
long long 或 long long int | 至少占 64 位,大于或等于最大 long 类型整数 |
- 无符号整型
只能用于表示零和正整数,前面添加 unsigned 表明该类型是无符号整型。 - 字符类型
表示一个字符要占用 1 个字节内存,有些编译器使用有符号 char,有些使用无符号 char。 - 布尔类型
表示 true 和 false ,是无符号 int 类型,C 语言用 1 表示 true,0 表示 false。 - 实浮点类型
可表示正浮点数和负浮点数。
类型 | 有效范围 |
---|---|
float | 至少 6 位有效数字 |
double | 至少 10 位有效数字和更大的指数 |
long long | 比 double 更多有效数字和更大的指数 |
- 复数和虚数浮点数
虚数是可选的类型,复数的实部和虚部都基于实浮点类型来组成。
基本数据类型的应用
代码示例
#include<stdio.h>
#include<inttypes.h>
int main(void) {
int x = 100;
int32_t me32 = 45933945; //类型别名是精确宽度整形类型
float aboat = 32000.0;
double abet = 2.14e9;
long double dip = 5.32e-5;
unsigned int un = 3000000000;
short end = 200;
long big = 65537;
long long verybig = 12345678908642;
int i = 2147483647;
char grade = 'A'; //8 位,字符常量视为int非char类型
char gradebig = 'FATE'; //字符常量视为int非char类型,取后 8 位,打印 E
char voice = '\a';
printf("无符号数:un = %u and not %d\n", un, un); //内存中的表示完全相同
printf("short 类型:end = %hd and %d\n", end, end); //short 会自动转 int,h修饰符,显示较大整数截断成 short 类型值
printf("long 类型:big = %ld and not %hd\n", big, big); //取低 16 位等于 1
printf("long long 类型:verybig = %lld and %ld\n", verybig, verybig); //取低 32 位
printf("打印进制:%d = %o = %x\n", x, x, x); //显示进制数
printf("进制显示:%d = %#o = %#x\n", x, x, x); //带进制显示进制数
printf("溢出处理:%d %d %d\n", i, i + 1, i + 2); //溢出会从开始计算
printf("字符打印:%d %d\n", grade, gradebig); //超出单字符取低 8 位
printf("警报字符:%c\n", voice); //打印可发出警报声
printf("Study xu,\"a \\ is a backslash\"\n"); //转义字符的应用
printf("me32 = %d\n", me32); //可移植类型
printf("me32 = %" PRId32 "\n", me32); //可移植类型应用
printf("%f can be written %e\n", aboat, aboat); //float 数字,科学记数法
printf("%f can be written %e\n", abet, abet); //double 数字,科学记数法
printf("%Lf can be written %Le\n", dip, dip); //long double 数字,科学记数法
//sizeof 以字节为单位给出对象的大小
printf("Type char has a size of %zd bytes.\n",sizeof(char)); //打印 char 长度 1 byte
printf("Type int has a size of %zd bytes.\n", sizeof(int)); //打印 int 长度 4 byte
printf("Type long has a size of %zd bytes.\n", sizeof(long)); //打印 long 长度 4 byte
printf("Type float int has a size of %zd bytes.\n", sizeof(float)); //打印 float 长度 4 byte
printf("Type double int has a size of %zd bytes.\n", sizeof(double)); //打印 double 长度 8 byte
return 0;
}
运行结果: