变量
表面:程序运行过程中取值可以改变的数据
实质:变量其实代表了一块内存区域/单元/空间。变量名可视为该区域的标识。
整个变量分为三部分:
变量名:这个只是变量的一个标识,我们借助变量名来存取数据。
变量空间/内存单元:这个就是内存中分配的一块用来存储数据的空间/区域。
数据/变量值:这个就是存放在变量空间中的数据
注意:我们把数据存放间变量名对应空间的过程称之为变量的赋值操作。
int a = 0;
变量的命名规则
变量名必须以字母或下划线开头,后面可以跟若干个字母、数字或下划线
不建议使用中文,也不建议使用拼音。(命名要见名知意)
变量名不能与C语言中已经存在的标识符重名,也就是关键字和保留字不能作为变量名
变量名、变量值、变量所占存储单元之间的关系
变量在定义的时候并不是指定义了一个变量名,而是同时在内存里开辟了一块存储空间用来存放变量。变量值就是用来存放进变量所占存储单元的数值。
例如:
int a = 0;
在定义int类型的变量a的同时,会开辟一个内存空间将变量值0赋值给这个空间。
注意:在C语言中,要求对所用到的变量使用前必须先强制定义,即:先定义,后使用。
因为没有定义的变量是没有存储空间的,在执行程序的过程中会报错。
变量的定义
1.利用同一个类型标识符可同时定义多个变量,各个变量之间使用,(英文逗号)分割。
2.定义变量后,如果未对变量进行初值的赋予,则变量所代表的内存空间中的数据是随机安排的。
3.可以在变量定义的同时给变量赋值,这个操作称为变量的初始化,C语言允许对变量进行初始化。
4. 初始化变量是,尽量做到类型相同。
数据在内存中的存放方式
整型数据
正整数的补码就是将该数据转换为二进制格式。
负整数的补码就是将该数据的绝对值转换为二进制格式,按位取反,并+1。
注:补码就是为了解决负数的存储
浮点型数据
采用指数方式存放
类型· | 符号位 | 指数位 | 尾数位 / 部分(小数) |
float(4字节) | 1 | 8 | 23 |
double(8字节) | 1 | 11 | 52 |
注意:浮点型数据在内存中存放的是一个近似值。
字符数据
以ASCII码存放字符的存在分为两种形式,ASCII码(编号,从0开始的正整数)和ASCII码值(数据,包括英文字母 大小写、数字、特殊符号)
//第一种
char c1 = 'A';
//第二种
char c2 = 60;
注意:ASCII码是可以和整数进行数学运算的。
数据类型转换
规则:不同的数据类型参与运算,需要转换为同一类型后运算
数值比较由小到大简单排序:
int unsigned long double
隐式类型转换
说明:编译系统自动完成,一般是低优先级类型向高优先级类型转换,这种被称作 (由小到大)。
强制类型转换
说明:程序员自己实现,一般是高优先级类型向低优先级类型转换,这种被称作(由大到小)。
int num2 = 65;//65在ASCII码中是字符A
char c2 = (char)(num2 + 32);//强制将计算后的int类型转换为char类型
注意:强制类型转换过程中,可能会出现精度丢失的问题。如果大类型数据范围 小类型数据范围,此时丢失超出部分的 数据,精度会缺失!
原则:类型转换并不会改变原变量的类型。
运算符
算术运算符
单目运算符
说明: ++ -- +(正) -(负) *(解引用运算符)
++a 与 a++ 的区别
int a = 1,int x = ++a; : ++ 在前,先自加1,后运算
int a = 1,int x = a++; : ++ 在后,先运算,后自加1
不管是++在前,还是++在后,计算数自身都会+1。区别在于运算的结 果不一样。++在前,先自加1,后运算;++在后,先运算,后自加1。
--a 与 a- 的区别
int a = 1,int x = --a; :-- 在前,先自减1,后运算
int a = 1,int x = a--; :-- 在后,先运算,后自减1
双目运算符
说明: + - * / %
+:相加
-:相减
*:相乘
/:相除
%:取余(取两个数相除产生的余数)
注意:
1. 两个整数相除的结果是整数,小数部分被舍弃。
2. 求模运算(取余运算)左右两边的操作数都必须是整型。
关系运算符
说明: > < >= <= != ==
>:大于
<:小于
>=:大于等于
<=:小于等于
!=:不等于
==:等于(两个等号是等于,一个等号是赋值)
逻辑运算符
说明: &&(与) ||(或) !(非)
&& :逻辑与(且),符号两边的操作数都为真,结果才为真。
|| :逻辑或(或),符号两边的操作数只有有一个为真,结果就为真。
! :逻辑反(取反),取反,非0为真
惰性运算
所谓的惰性运算,就是减少运算次数。
短路与:&&两边的操作数,只要左边不成立0,直接返回假,不再校验右边。
短路或:||两边的操作数,只要左边成立1,直接返回真,不再校验右边。