数据类型和变量
1.数据类型
C语言中提供丰富的数据类型描述生活中的各种数据。
1.1整型
//短整型
short [int]
[signed] short [int]
unsigned short [int]
//整型
int
[signed] int
unsigned int
//长整型
long [int]
[signed] long [int]
unsigned long [int]
1.2浮点型
float//单精度
double//双精度
long doule
1.3布尔类型
_Bool
布尔类型变量的取值是:true或false。C语言中0表示假,非0表示真。
布尔类型使用需要包含头文件<stdbool.h>
1.4字符型
char
[signed] char//有符号的
unsigned char//无符号的
1.5数据类型的长度
每一种数据类型都有自己的长度,使用不同的数据类型,就能创建长度不同的变量,变量长度不同,存储的数据范围就不同。我们可以使用sizeof计算变量类型长度。
sizeof是一个关键字,也是操作符,用来计算sizeof的操作符数的类型长度,单位是字节。
sizeof (类型)
sizeof 表达式
注意:①sizeof 后面的表达式不真实参与计算,只根据表达式类型得出大小。
②sizeof的计算结果是size_t类型,C语言中可直接使用。
③sizeof的返回值类型是%zd。
④sizeof返回的是无符号整数,可能是unsigned int,unsigned long或者unsigned long long类型,对应的printf()占位符分别是%u、%lu、%llu。
例如:
#include <stdio.h>
int main()
{
int i = 1;
printf("%zd\n", i);
printf("%zd\n", sizeof i);
printf("%zd\n", sizeof(i));
printf("%zd\n", sizeof(i + 2));//表达式不真实参与计算,只根据表达式类型得出大小
printf("%zd\n", sizeof(int));
return 0;
}
1
4
4
4
4
那么各种数据类型的长度又是多少呢?
int main()
{
printf("%zd\n", sizeof(char));
printf("%zd\n", sizeof (_Bool));
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));
return 0;
}
在VS2022 X64配置下输出:
1
1
4
2
4
8
4
8
8
1.6 长度类型操作符signed和unsigned
signed和unsigned关键字是修饰字符型和整型类型的。
signed关键字,表示一个类型带有正负号,只能表示0和正整数。对于int类型,默认带有正负号,即int等同于signed int。
unsigned关键字,表示一个类型不带有负号,只能表示正整数和0,例如:年龄。int类型也可以不带正负号,只表示非负整数,使用unsigned声明变量。
unsigned int a;
unsigned a;//两者等同
关于字符类型char,C语言默认是否带有正负号由系统决定,所以char不等同于unsigned char,可能是signed char,也可能是unsigned char。
signed char b; //范围为-128到127
unsigned char b; //范围为0到255
2.变量
语法形式:
初始化变量:在创建变量时给一个初始值。有时在编写程序时会强迫要求初始化,原因是什么呢?这就涉及到全局变量和局部变量的概念。
全局变量:在大括号外部定义的变量。
局部变量:在大括号内部定义的变量,只能在自己所在的局部范围内使用。
int i = 0; //全局变量
int main()
{
int i = 1; //局部变量
printf("%d\n",i);
return 0;
}
1
我们可以发现,当局部变量与全局变量名称相同时,局部变量优先使用。
解答上面的问题,为什么在编写程序时会强迫要求初始化,是因为局部变量不初始化默认值时随机值,全局变量不初始化默认值为0。
以上是数据类型与变量的基本知识,操作符相关内容会写在下一期。欢迎大家交流指正,别忘了点赞收藏评论哦💕💕