前言
我们将生活中的不同数据根据它们的共同特征分为不同的“类型”,只有知道了数据的类型,编译器才能知道如何操作这些数据。C语言为我们提供的各种数据类型可以分为内置类型和自定义类型,在本篇文章中主要探讨内置数据类型。
内置数据类型可分为:
- 字符型
- 整数类型
- 浮点型
- 布尔类型
1.基本数据类型分类
1.1字符型char
字符型数据类型关键字为char,用于存放字符;
1.2整数类型int
整数型数据类型用于存放整数数字,可分为:
- 整型int
- 短整型 short
- 长整型long
- 更长的整型long long(在C99中引入);
1.3浮点型float
浮点型数据类型用于存放小数数字,可分为:
- 单精度浮点型float
- 双精度浮点型double
- 多精度浮点型long double(在C99中引入);
1.4布尔类型bool
布尔类型是在C99中引入的,用来表示真假。
- bool类型的使用需要引用头文件<stdbool.h>
- bool变量的取值是ture或者false
代码演示:
#include <stdio.h>
#include<stdbool.h>
int main()
{
bool flag = true;
if (flag)
printf("1\n");
else
printf("0\n");
return 0;
}
代码运行结果如下:
1.5无符号型unsigned
- signed关键字:表示一个类型带有正负号,包含负数;
- unsigned关键字:表示一个类型不带有正负号,只包含0和正数;
对于int类型来说,默认是带有正负号的,也就是int 等于signed int; 当我们需要使用无符号数时,就需要用到unsigned关键字。
unsigned 可以搭配int,short,long,long long 一起使用来表示无符号数。
- unsigned int 或者unsigned :无符号基本型
- unsigned short:无符号短整型
- unsigned long:无符号长整型
对于char类型来说,也可以设置signed 和 unsigned 。
但是需要注意的是,在C语言中,char类型默认是否带有正负号是由当前系统决定的。也就是说,char类型不等于 signed char ,也不等于 unsigned char。
注意:在C语言中不能定义unsigned float 和unsigned double,否则系统会报错。
2.基本数据类型的长度
每种基本数据类型都有不同的长度,使用不同的数据类型,我们可以创建出不同长度的变量。我们在使用数据类型时,需要根据数据类型的长度进行合适的选择。
2.1 sizeof操作符
sizeof可以用来测量sizeof中操作符数类型长度的操作符,也是一个关键字。操作数可以是类型也可以是变量或者表达式,单位是字节。
2.2使用sizeof操作符计算基本数据类型长度
代码如下:
#include <stdio.h>
int main()
{
printf("字符型数据占用%zd个字节\n", sizeof(char));
printf("整型数据占用%zd个字节\n", sizeof(int));
printf("短整型数据占用%zd个字节\n", sizeof(short));
printf("长整型数据占用%zd个字节\n", sizeof(long));
printf("更长的整型数据占用%zd个字节\n", sizeof(long long));
printf("单精度浮点型数据占用%zd个字节\n", sizeof(float));
printf("双精度浮点型数据占用%zd个字节\n", sizeof(double));
printf("多精度浮点型数据占用%zd个字节\n", sizeof(long double));
printf("布尔类型数据占用%zd个字节\n", sizeof(_Bool));
return 0;
}
运行结果如下:
通过sizeof操作符我们可以直观的看出不同数据类型的长度;
注意:sizeof操作符后是表达式的时候可以省略掉括号,是表达式的时候,表达式不参与运算,只根据表达式的类型计算结果。
3.基本数据类型的取值范围
C语言中每种数据类型都有自己的取值范围,我们可以根据自己的实际需要来选择合适的数据类型。
- <limits.h> 这个头文件中说明了整数类型的取值范围;
- <float.h >这个头文件中说明了浮点型的取值范围。
在上文中我们已经知道每种数据类型的长度,以[signed] int 整型数据为例,占用4个字节,1字节=8 bit;即32位,2^32=4,294,967,296; 即int型变量的取值范围为-2,147,483,648到2,147,483,647
根据上述办法我们可以计算出其他数据类型的取值范围。
4.小结
如下表:
数据类型 | 名称 | 长度 | 取值范围 |
char | 字符型 | 1 byte | -128到127或 0到255 |
int | 整型 | 4 byte | -2,147,483,648到 2,147,483,647 |
short | 短整型 | 2 byte | -32,768到 32,767 |
long | 长整型 | 4 byte | -2,147,483,648到 2,147,483,647 |
long long | 更长的整型 | 8 byte | -9,223,372,036,854,775,808到 9,223,372,036,854,775,807 |
float | 单精度浮点型 | 4 byte | -2,147,483,648到 2,147,483,647 |
double | 双精度浮点型 | 8 byte | 9,223,372,036,854,775,808到 9,223,372,036,854,775,807 |
long double | 多精度浮点型 | 8 byte | 9,223,372,036,854,775,808到 9,223,372,036,854,775,807 |
bool | 布尔类型 | 1 byte | ture或false |
unsigned int | 无符号整型 | 4 byte | 0到4,294,967,295 |
unsigned short | 无符号短整型 | 2 byte | 0到65535 |
unsigned long | 无符号长整型 | 4 byte | 0到4,294,967,295 |