在用从C语言去解决实际问题时,往往要根据实际情况设一些变量,而声明这些变量时,首先要声明其数据类型
一.数据类型
C语言的数据类型可分为以下几类
1.字符型(char)
unsigned char signed char
2.整型
短整型:short unsigned short (signed) short
整型:int unsigned int (signed) int
长整型:long unsigned long (signed) long
更长的整型:long long unsigned long long (signed) long long
3.浮点型
单精度浮点型:float
双精度浮点型:double
多精度浮点型:long double
4.布尔类型 _Bool
用0表示假(false),用1表示真(true)
#include<stdio.h>
#include<stdbool.h>
//使用布尔类型时要引用头文件stdbool.h
//布尔类型的取值只有两种:true 1 flase 0
int main()
{
_Bool flag=true;
if(flag)
printf("hehe");
return 0;
}
二.各种数据类型的长度
1.sizeof操作符
sizeof可以用来计算数据类型的长度,或者计算变量和表达式类型的长度,计算的结果单位是字节
sizeof得到的结果返回的类型是无符号整数,但具体是short,int还是long取决于编译器,因此将sizeof返回的结果统一命名为size_t类型,占位符用%zd
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(double));
printf("%zd\n",sizeof(float));
printf("%zd\n",sizeof(long double));
return 0;
}
由此可见各数据类型的长度在内存中所占的字节数
3.用sizeof计算变量或表达式对应类型的长度
#include<stdio.h>
int main()
{
int a=10;
short b=1;
printf("%zd",sizeof(a));
printf("%zd",sizeof a);//计算变量类型的长度时可以不加括号
printf("%zd",sizeof(b=a+1));
return 0;
}
由运行结果可知,sizeof在计算表达式的长度时,只计算表达式类型所对应数据类型的长度
三.unsigned和signed
C语言中使用unsigned和signed来表示整型和字符型的有无正负
对于整型来说,一般默认是有符号(signed)的,既有正负,signed可省略不写。例如,int可直接默认为signed int。
对于字符型来说便不能进行默认,字符型char是有符号还是无符号取决于编译器。
对于这两种类型所表示的数值范围来说,unsigned要比signed表示的数值范围大一倍(正数)
这是由于在计算机内存中,数据是以二进制形式存放的,而有符号的数据存储时最高一位代表着正负(1负0正),但无符号的数据就不需要如此,因此无符号比有符号的数据范围要大。
要查看各数据类型的范围,可以通过limits.h和float.h来查看
四.变量的创建和使用
在C语言中,要想声明一个变量,首先要声明它的数据类型,其次要声明它的变量名称(不能是关键字)
int a=10;//声明一个名称为a的整型变量
初始化:即在声明变量时就给变量赋值
变量的分类:全局变量和局部变量
全局变量:即在整个程序中够可以使用的变量
局部变量:即只能在该变量所在函数块中使用的变量
#include<stdio.h>
int b=1;//全局变量,在整个程序中都能使用
int main()
{
{
int a=10;//局部变量,只能在当前大括号内使用
}
printf("%d,%d",a,b);
return 0;
}
(由于a是局部变量已经失效,所以报错)
注意:当局部变量和全局变量同名时,优先使用局部变量
#include<stdio.h>
int a=100;
int main()
{
int a=10;
printf("%d",a);
return 0;
}
这时就只打印局部变量的值