来给大家介绍一下数据类型和变量。
1.语句和语句分类
2.数据类型介绍
3.signe和unsigned
4.数据类型取值范围
5.变量
6.操作符
1.语句和语句分类
简单的说分号隔开的就是一条语句,语句可以分成五种类型
这里先简单的给大家列举一下,以后再给大家详细介绍。
2.数据类型介绍
我们日常生活中见到的数据是多种多样的,他们有正的有负的,有整数有小数,有字母有数字,它们在内存中所占的空间也是不一样的,因此我们要把它们分类以便于管理和应用。
数据类型包括内置类型也就是C语言与生俱来的数据类型,共有四种分别是字符类型,整形,浮点型,布尔类型。另一种则是自定义类型即人为创建的类型,它包括数组,结构体,枚举和联合体。这里我们着重介绍内置类型。
1.字符类型
字母,数字,中英文字符以及一些特殊的符号都是字符,在C语言中用char表示字符类型,并用单引号引用,比如‘A’就是一个字符。char其实是signed char的简写,它是指有符号字符型,unsignde char是无符号字符型,他们的区别在于所取值得范围不同,取值范围的问题会在下面详细讲解哦。需要注意的是在输出字符的时候用的是%c。
#include<stdio.h>
int main()
{
char ch='a';
printf("%c\n",ch);
return 0;
}
2.整形
这四种类型又分别可以分为有符号和无符号两种类型,所以总的来说一共是八种类型。这四种类型所占的内存空间是不同的
输出的结果是以字节为单位的,short类型在内存中占两个字节,在这里小伙伴们可能会有疑问,int和long int在内存中都占4个字节,为什么还要区分呢?其实这是C语言的一个规定long int>=int,也就是说long int可以占4个字节也可以占8个字节。
3.浮点型
首先给大家介绍一下他为什么叫做浮点,我们在上小学的时候就学过小数和科学计数法,就像1.23也可以写成0.123*10^1,小数点的位置发生了浮动,因此就叫做浮点型。浮点型分为单精度浮点型float和双精度浮点型double,它们主要有以下三点区分
精度不同,float是单精度浮点型,精度为7~8位有效数字,double的精度为16~17位有效数字;
存储空间不同,float的比特数为32,在内存中占四个字节,double的比特数为64,在内存中占用八个字节;
表示范围不同,float的取值范围是-3.4e-38~3.4e38,double的取值范围是-1.7e-308~1.7e308
4.布尔类型
我们知道在C语言中0表示假,非0表示真,在C99中专门引入了布尔用来表示真假,布尔类型取值只有ture和false两种,在使用布尔类型的时候需要包含头文件<stdbool.h>。
3.signed和unsigned
signed和unsigned是用来修饰整形和字符型的,signed表示这个类型有正负之分,signed是默认的它在存储的时候符号位要占用内存中的一个比特位,而unsigned则只能表示0和正整数,准确的来说unsigned是将数字类型无符号化。它们所表示的范围也有很大的差异,声明unsigned的好处在于同样大小的内存表示的最大整数值比signed大了一倍,例如int能表示的最大整数为2^31,unsigned能表示的最大整数为2^32。
4.数据类型取值范围
C语言中的数据类型都有相应的范围,我们在VS中查看它们的范围的时候需要包含头文件<limits.h>,例如我要查看int类型的范围
INT_MIN和INT_MAX这些符号常量是头文件<limits.h>里的宏定义,当我们想给一个变量赋intl类型的最小值时我们可以直接写成int a=INT_MIN;
5.变量
5.1变量的创建
创建变量的时候要有两个要素即数据类型和变量名,例如int a,这就完成了一个变量的创建,我们一般在创建变量的时候会对变量进行初始化处理,例如int a=10
5.2变量分类
变量分为局部变量和全局变量,通俗的来讲全局变量定义在大括号外面,在整个工程中都能使用,局部变量定义在大括号内部,只在局部范围内有作用
全局变量和局部变量在内存中的存放也有一定的区别,我们知道内存中有栈区,堆区和静态区,而我们的全局变量就存放在静态区,局部变量存放在栈区。
6.操作符
6.1算数操作符
算数操作符包括+,-,*,/(取整),%(取余),在这里主要介绍/和%。
简单的来说变量c的值就是5除以三取整数部分即商数,d就是5除以3取余数部分。
6.2赋值操作符(双目操作符)
赋值操作符是=,==是等于操作符,这跟我们平时用的等于号有些许不同,a=3就是将3赋给a。它采用右结合定律即当遇到a=b=c=5这样的表达式时,它的运算顺序是这样的,5先赋给c,c的值再赋给b,b的值再赋给a,就相当于a=(b=(c=5))。
在C语言中我们常见的还有+=,-=,*=,/=,%=,它们的运算规则与=是一样的,用+=举例,a+=5就是a=a+5。
6.3位操作符
&(按位与),|(按位或),^(按位异或),在讲位操作符之前,我们首先要明白,在C语言中0为假非0为真。
&:左右两个操作数的每一位相对应的进行与运算,所谓的与运算就是两边都为真结果才为真
这里要注意的是并不是说因为a,b都是真结果才为真,要把3和5转化成二进制数然后再对应位进行真假判断,0与0为0,0与1为0,1与0为0,1与1为1,则结果为1(非零数)。
|:它与&的运算方法是一样的,但是它在左右两个操作数有一个为真时即使真;
^:运算方法与&,|相同,它在左右两个操作数相同时(都为真或都为假)为0,不同时为1。
6.4逻辑操作符
&&(逻辑与):左右两个操作数都为真时为真其余为0;
||(逻辑或):左右两个操作数有一个为真即为真
!(逻辑非):对操作数进行反向操作
6.5关系操作符
关系操作符我们就很常见了,<,><=,>=,!=(不等于),==(测试相等),这里就不过多介绍了
6.6条件操作符
exp1?exp2:exp3(表达式1?表达式2:表达式3),这种运算符我们是不常见到的,它的运算顺序是,若表达式1为真则执行表达式2,否则则执行表达式3。
6.单目,双目和三目操作符
首先单目,双目和三目的意思分别是有一个操作数,两个操作数和三个操作数。向上面我们介绍的逻辑非为单目操作符,算数操作符为双目操作符,条件操作符为三目操作符。这里我们着重要介绍一下++(自增1的操作符),--(自减1),要注意的是a++和++a是不一样的,比如b=a++,这时是先赋值后自增,若是b=++a,则是先自增再赋值
运行结果为b为10也就是先赋值,赋值后a已自增为11,c的结果为a为11的基础上先自增到12再赋值。
操作符我们就先介绍到这里,还有一个很重要的知识点就是操作符的运算顺序,如下图