一、什么是数据类型
数据类型(Data Type)定义了存储在内存中的数据的种类,并决定了数据在内存中的布局和可以进行的操作,所谓“类型”,就是相似的数据所拥有的共同特征,编译器只有知道了数据的类型,才知道怎么操作数据
二. 数据类型的分类
2.1 字符型
char // character
[signed] char // 有符号的 signed可以省略
unsigned char // ⽆符号的// 占一个字节
2.2 整型
// 短整型 占两个字节
short[int]
[signed] short[int]
unsigned short[int]
// 整型 占四个字节
int
[signed] int
unsigned int
// 长整型 占八个字节
long[int]
[signed] long[int]
unsigned long[int]// 更长的整型 占八个字节
long long[int]
[signed] long long[int]
unsigned long long[int]
2.3 浮点型
float // 单精度浮点型
double // 双精度浮点型
long double // 长双精度浮点数
2.4 布尔类型
C 语言原来并没有为布尔值单独设置⼀个类型,而是使用整数 0 表示假,非零值表示真
但在 C99 中也引入了 布尔类型 ,是专门表示真假的
_Bool // 布尔类型
注意:
a. 在使用布尔类型时得包含头文件 <stdbool.h>
b. 布尔类型变量的取值是: true 或者 false
三、sizeof 操作符
sizeof 既是一个关键字,也是一个操作符,专门用来计算sizeof的操作符数的类型长度的,单位是字节
sizeof 操作符的操作数可以是类型,也可是变量或者表达式
sizeof(类型)
sizeof 表达式
注意:
a. sizeof 的操作数如果不是类型,是表达式的时候,可以省略掉后边的括号的,sizeof 的计算 结果是 size_t 类型的,需要的占位符是 %zd
#include <stdio.h>
int main()
{
int a = 10;
printf("%zd\n", sizeof(a));
printf("%zd\n", sizeof a); //a是变量的名字,可以省略掉sizeof后边的()
printf("%zd\n", sizeof(int));
printf("%zd\n", sizeof(3 + 3.5));
return 0;
}
b. sizeof 后边的表达式是不真实参与运算的,根据表达式的类型来得出大小
#include <stdio.h>
int main()
{
short s = 2;
int b = 10;
printf("%zd\n", sizeof(s = b + 1));
printf("s = %d\n", s);
return 0;
}// 输出:2
s = 2
使用 sizeof 计算数据类型的长度
#include <stdio.h>
int main()
{
printf("%zd\n", sizeof(char)); // 1
printf("%zd\n", sizeof(_Bool)); // 1
printf("%zd\n", sizeof(short)); // 2
printf("%zd\n", sizeof(int)); // 4
printf("%zd\n", sizeof(long)); // 4
printf("%zd\n", sizeof(long long)); // 8
printf("%zd\n", sizeof(float)); // 4
printf("%zd\n", sizeof(double)); // 8
printf("%zd\n", sizeof(long double)); // 8
return 0;
}
四、signed 和 unsigned
signed 和 unsigned 是C语言中的关键字,用来修饰字符型和整型类型
signed:表示一个类型带有正负号,包含负值
unsigned:表示该类型不带有正负号,只能表示零和正整数
4.1 修饰整型 ( int ) 类型
对于 int 类型,默认是带有正负号的,也就是说 int 等同于 signed int
所以,关键字 signed 一般都省略不写,但是写了也不算错
signed int a;
// 等同于int a;
unsigned int 里面的 int 也可以省略
unsigned int a;
// 等同于 unsigned a;
4.2 修饰字符型 ( char )
signed char c; // 范围为 -128 到 127
unsigned char c; // 范围为 0 到 255
注意:
C语言规定 char 类型默认是否带有正负号,由当前系统决定
也就是说, char 不等同于 signed char ,它有可能是 signed char ,也有可能是
unsigned char
4.3 unsigned 的好处
unsigned 的好处是,同样长度的内存能够表示的最大整数值,增大了一倍
比如:16位的 signed short int 的取值范围是:-32768~32767,最大是32767;而 unsigned short int 的取值范围是:0~65535,最大值增大到了65,535
signed char c 的取值范围是 -128 到 127,最大值为127,unsigned char c 的取值范围是 0 到 255,最大值为 255