第一讲:C语言数量据类型和变量
1.数据类型
1.1数据类型介绍
前言
C语⾔提供了丰富的数据类型来描述⽣活中的各种数据。使⽤整型类型来描述整数,使⽤字符类型来描
述字符,使⽤浮点型类型来描述⼩数。所谓“类型”,就是相似的数据所拥有的共同特征,编译器只
有知道了数据的类型,才知道怎么操作数据。
1.1.1整形
- 整型类型数据即整数数据(0、2、3······)。
- 整型可以分为以下四种类型:
短整型:short int
整型:int
长整型;long int
更长的整型:long long int - 在使用中,除整型外,短整型、长整型和而更长的整型中,int都可以省略。
- 此外整型还可以分为有符号类型和无符号类型,此种类型将在下文1.2中介绍
1.1.2浮点型
- 浮点型可以分为以下三种类型:
单精度浮点型:float
双精度浮点型:double
长双精度浮点型:long double
1.1.3字符型
- 若只考虑精度方面,字符型只有一种类型:char
- 什么是字符
在键盘上可以敲出各种字符,如:a,q,@,#等,这些符号都被称为字符,C语⾔中字符是⽤单引号括起来的,如:‘a’,‘b’,‘@’。 - 字符在计算机中的储存我们知道在计算机中所有的数据都是以⼆进制的形式存储的,那这些字符在内存中分别以什么样的⼆进制存储的呢?如果我们每个⼈⾃⼰给这些字符中的每个字符编⼀个⼆进制序列,这个叫做编码,为了⽅便⼤家相互通信,不造成混乱,后来美国国家标准学会(ANSI)出台了⼀个标准 ASCII 编码,C语
⾔中的字符就遵循了 ASCII 编码的⽅式。因此字符变量可以看作是整型变量的一种,读者完全可以把它当成一个整型变量。因为当它用于存储字符常量时,实际上是将该字符的ASCⅡ码值(无符号整数)存储到内存单元中。 - ASCII码表
1.1.4布尔类型
- 在C语言中怎样表示真假?
在C语言中原本没有为真假单独设置一个数据类型,而是用0表示假,用非零表示真 - 在C99中专门引入了布尔类型这一概念来专门表示真假
注意:布尔类型的使用需要包括头文件<stdbool.h> - 代码演示
1.2signed和unsigned
-
C语言中使用signed和unsigned关键字来修饰字符型和整形(字符型,在ascii吗表中的值,也是整数,所以和short、int等一样都是全在整形里的)
注意:signed和unsigned并不能用来修饰浮点型 -
signed关键字,表示一个类型带有正负号(包括负值)
-
unsigned关键字,表示该类型不带有正负号(只能表示零和正整数)
-
对于整形来说,默认是带有正负号的,也就是说可以省略signed(int=signed int),但是,C 语⾔规定 char 类型默认是否带有正负号,由当前系统决定。这就是说, char 不等同于 signed char ,它有可能是 signed char ,也有可能是unsigned char 。
-
变量声明为unsigned的好处
同样长度的内存了唔够表示的数值扩大一别(计算机讲储存负数部分的内存也用于储存正数)
-
在加入signed和unsigned后,数据类型扩展到了如下数目
1.3数据类型的取值范围
- 每一种数据类型都有自己的取值范围,也就是存储的数值的最大值和最小值,因此我们应当提前熟悉不同数据类型的范围,在不同的条件下选择合适的数据类型 不同数据类型所占据的内存大小不同,选择合适的数据类型有助于避免程序冗余
- 具体取值范围
2.变量
2.1变量的创建
- 了解清楚了类型,我们使⽤类型做什么呢?类型是⽤来创建变量的,C语⾔中把经常变化的值称为变量,不变的值称为常量。
- 变量创建的语法形式
date_type(数据类型) name(变量名);
例:
- 初始化
变量在创建的时候就给⼀个初始值,就叫初始化。 - float类型的赋值
在对float进行赋值时,编译器会将小数自动识别为double类型,我们可以通过在小数后面加f的方式将其转换为float类型
2.2变量的分类
- 全局变量:在大括号以为的变量就是全局变量。
- 局部变量:在大括号以内的变量就是局部变量。
- 当局部变量和全局变量同名时,优先使用局部变量
注意,是优先使用,而不是重新赋值
- 全局变量和局部变量在内存中存储在哪⾥呢?
⼀般我们在学习C/C++语⾔的时候,我们会关注
内存中的三个区域:栈区、堆区、静态区。
1.局部变量是放在内存的栈区
2.全局变量是放在内存的静态区
3.堆区是⽤来动态内存管理的
3.操作符
3.1算数操作符
3.1.1+ 和 -
- 我们可以利用+和 -来完成加法和减法。
- 双目操作符
+和 - 都是有2个操作数的,位于操作符两端的就是它们的操作数,这种操作符也叫双目操作符
3.1.2 *
- 运算符 * ⽤来完成乘法。
3.1.3 /
- 运算符 / ⽤来完成除法。
- 除号的两端如果是整数,执⾏的是整数除法,得到的结果也是整数。
- 如果希望得到浮点数的结果,两个运算数必须⾄少有⼀个浮点数,这时 C 语⾔就会进⾏浮点数除法。
3.1.4 %
- %用于完成求余运算,即得到两个整数相除的余数
- 这个运算符只能⽤于整数,不能⽤于浮点数。
- 结果的正负号由第一个运算数决定
3.2赋值操作符 =
- 复制操作符=是一个随时可以给变量赋值的操作符。
- 连续赋值
从右向左依次赋值
b=a+3=6;
c=b=6; - 复合赋值
复合赋值符
3.3单目操作符
- ++、–、+(正)、-(负) 是单⽬操作符的
3.3.1
++和–
- 前置++
计算口诀:先加一,后使用
a原来是10,先+1,后a变成了11,再使⽤就是赋值给b,b得到的也是11,所以计算技术后,a和b都是11。 - 后置++
计算⼝诀:先使⽤,后+1
a原来是10,先使⽤,就是先赋值给b,b得到了10,然后再+1,然后a变成了11,所以直接结束后a是11,b是10。 - 前置–
计算⼝诀:先-1,后使⽤ - 后置–
计算⼝诀:先使⽤,后-1
3.3.2 +(正)、-(负)
- 这⾥的+是正号,-是负号,都是单⽬操作符。
- 运算符 + 对正负值没有影响,是⼀个完全可以省略的运算符,但是写了也不会报错。
- 运算符 - ⽤来改变⼀个值的正负号,负数的前⾯加上 - 就会得到正数,正数的前⾯加上 - 会得到负数。
3.4强制类型转换
在操作符中还有⼀种特殊的操作符是强制类型转换,语法形式很简单,形式如下:
俗话说,强扭的⽠不甜,我们使⽤强制类型转换都是万不得已的时候使⽤,如果不需要强制类型转化
就能实现代码,这样⾃然更好的。