1.1 概念
在整个程序运行的过程中,值允许发生变化的量。
1.2 定义变量的格式
一、变量
1.1 概念
在整个程序运行的过程中,值允许发生变化的量。
1.2 定义变量的格式
存储类型 数据类型 变量名;
存储类型:auto static extern register
局部变量不写存储类型 默认的都是auto
数据类型:决定了定义的变量占用的内存空间的大小的
变量名:是一个标识符,要符合标识符命名规范
1.3 定义变量的作用
相当于告诉操作系统 给这个变量分配内存空间 准备存储数据了
1.4 变量的初始化和赋值
二、强制类型转换
注意:强制类型转换是不安全的,要谨慎使用。
小的类型转大的一般没问题,
但是大的类型转小的就可能出现数据的截断。
所谓的强制类型转换,就是在某次运算中,
通过某种方式将变量的类型换成其他的类型来参与本次运算。简称 强转
不会影响变量自身的类型,变量自身的类型只和定义变量时有关。
2.1 显式强转
格式:
(新的类型)变量名
例如:
2.2 隐式强转
隐式强转是由编译器根据上下文自动推导出来的,
如果编译器认为这种强转是安全的,就直接通过了
如果认为是不安全的,可能会报一个警告,具体取决于编译器的严谨程度。
注意:
有符号数和无符号数参与运算时,会将有符号数转换成无符号数来参与运算。
signed int a = -20;
unsigned int b = 10;
a+b 的结果是大于 0 的
三、运算符
3.1 概念
运算符就是一个符号,是用来连接多个表达式从而进行运算的。
所谓的表达式,就是由运算符、运算量、标点符号 等组成的一个有效序列
是用来说明运算的过程的。
3.2 运算符的分类
根据类型区分:
算数运算符 : + - * / %(模除 取余运算 模除运算符要求左右操作数必须是整型) ++ --
关系运算符 : > < >=
逻辑运算符 : && || !
位运算符 : & | ^ ~ >
赋值运算符 : = += -= *= /= %= &= |= (复合赋值运算符)
条件运算符 : ?: (C语言中唯一一个三目运算符)
sizeof运算符 : 计算变量或者类型的大小的
逗号运算符 : 不常用
3.3 算数运算符
+ - * / %
C语言中输入的函数 scanf
3.4 自增自减运算符
++ --
int a = 10;
a++ a = a+1;
++a a = a+1;
a-- a = a-1;
--a a = a-1;
注意:以++运算符为例 不管是 a++ 还是 ++a ,执行之后 a 的值都会 +1
但是表达式的结果是不一样的
a = 10;
b = ++a;
上述两步之后 a = 11 b = 11
a = 10;
b = a++;
上述两步之后 a = 11 b = 10
3.5 关系运算符
> < >=
关系运算符就是用来判断大小关系的
关系运算符表达式的结果是一个bool类型 0 假 非0 真
多用于控制语句
注意:一定要区分 = 和 ==
= 赋值运算符
== 关系运算符
例:
3.6 逻辑运算符
&& || !
逻辑运算符是用来连接多个由关系运算符组成的表达式的
所以逻辑运算符表达式的结果也是一个 bool 类型
&& 逻辑与 表示并且的意思
逻辑与连接的多个表达式,如果全为真,整个表达式的结果才为真,
有一个表达式为假,则整个表达式的结果就为假
|| 逻辑或 表示或者的意思
逻辑或连接的多个表达式,有一个为真,整个表达式的结果就为真
所有表达式都为假,整个表达式的结果才为假
! 逻辑非 相当于逻辑取反的意思
真变假 假变真
逻辑非是一个单目运算符,用法如下:
逻辑运算符使用实例:
C语言不支持这样的写法 : 10<X>20
逻辑运算符的短路原则:
逻辑与连接的多个表达式,如果遇到某一个为假了,后面的表达式就不再执行了
逻辑或连接的多个表达式,如果遇到某一个为真了,后面的表达式就不再执行了
3.7 位运算符
位运算符是针对二进制而言的,位指的是bit位,不管几进制的数据,只要做位运算,
一定要转换成二进制来参与运算
一般情况下,涉及位运算时使用的都是无符号数据,如果有符号
还可能设置原码、反码、补码转换的问题
一般多用于硬件设备的控制和标志位的控制。
& 按位与 : 按位运算,全1为1,有0为0
| 按位或 : 按位运算,有1为1,全0为0
^ 按位异或 : 按位运算,不同为1,相同为0
~ 按位取反 : 1变0 0变0
>> 按位右移 : 整个数据向右移动,舍弃低位,高位补0
例:
小技巧:
0与任何数 结果都是0
0或任何数 结果都是任何数
1或任何数 结果都是1
1与任何数 结果都是任何数
3.8 赋值运算符
=
一般形式: 左 = 右
注意:
1.是将右边的值赋值给左边
2.常量是不能放在左边的
3.注意 = 和 == 的区别
复合赋值运算符:
+= -= *= ...
a+=b a = a+b;
a-=b < ===> a = a-b;
...其他同理
3.9 条件运算符
?:
是C语言中唯一一个 三目运算符
格式:
表达式1?表达式2:表达式3;
执行逻辑:
先执行表达式1,如果表达式1为真则执行表达式2,否则执行表达式3.
和 if..else 语句的逻辑很类似。
例如:
3.10 sizeof运算符
sizeof运算符是用来计算变量或者类型的大小
格式:
sizeof(变量名或者类型名);
sizeof的用法和函数调用非常像,要注意,sizeof是C语言的关键字,不是函数调用
sizeof返回的计算结果:
32位系统 返回的是4字节的 %d
64位系统 返回的是8字节的 %ld
3.11 逗号运算符
----不常用,了解即可
所谓的逗号运算符,就是用逗号来连接多个表达式。
格式:
(表达式1, 表达式2, 表达式3 ... ,表达式n)
执行逻辑:
从左到右,每个表达式都会执行,最后一个表达式的结果就是整个逗号运算符表达式的结果
例如:
3.12 运算符优先级问题
如果要写复杂的表达式,区分不好运算符的优先级时,可以加()来控制优先级
因为()优先级是最高的, 如 (a+((b-(c*6))+5))
运算符优先级,参考下图:
运算符优先级的顺口溜:
单算移关与,异或逻条赋。