Day5 内容梳理:
目录
Chapter 3 运算符
3.1 运算符分类
(1)分类表
类型 | 定义/作用 | 符号 | 补充 |
算术运算符 | 处理四则运算 | + - * / 加减乘除 % 取余 ++a 前自增 a++ 后自增 --a 前自减 a-- 后自减 | *1 除号: 整型 / 整型 = 整型; 浮点型 / 整型 = 浮点型 *2 自增减运算符之间的区别 取余: 比如10%3 = 1 0不能作为除数 |
赋值运算符 | 将表达式的值赋给变量 | = += -= *= /= %= | a+=5 等同于 a = a+5,其他的同理。 |
比较运算符 | 比较表达式, 表达式为真则返回1,为假则返回0 | == != < <= > >= | *3 C语言中,用数字1来表示“真”,用数字0来表示“假” |
逻辑运算符 | 根据表达式的值,返回真值1或假值0 | ! 非 && 且 || 或 | 非: *4 C语言中,“!”用于反转真假。在真值前加“!”会让其变为假值0;假值同理。 &&: 以 A && B 为例,如果A为假,则不会再运行B,而是直接返回0 |
位运算符 | 处理数据的位运算 | (后续学到这部分了,再补充上) | |
sizeof运算符 | 用于求字节数的长度 | 格式:sizeof(变量) |
(2)要点辨析:
*1 被除数的数据类型决定着结果的类型
*2 四类自增减运算符的区别
相同点:不影响变量本身的自增自减,但是会影响表达式的运算结果。
不同点:将自增减代码拆成两行代码,各自的顺序不同。
前自增 ++a | 后自增 a++ | 前自减 --a | 后自减 a-- | |
原代码 | int b = ++a*10; | int b = a++*10; | int b = --a*10; | int b = a--*10; |
代码拆开后的顺序 | int a++; int b = a*10; | int b = a*10; int a++; | int a--; int b = a*10; | int b = a*10; int a--; |
代码示例:
*3 & *4 真值“1”和假值“0”
当表达式为真时,返回数字1;为假则返回数字0;
另外,C语言中只有0是假值,其余的数字都是真值。
因此在真值前加上奇数个“!”会得到假值0;偶数个“!”则是1;
3.2 运算符优先级
共分15个档,比较细致,参考视频:05运算符下_哔哩哔哩_bilibili
3.3 类型转换
(1)类型转换的原则:
将占用内存字节数小的类型,转化为占用内存字节数多的类型,以保证精度不降低。系统中自动的转换方向如下。
(2)两种转换方法:
①自动转换:
由编译系统遵循上面的代码转换规则,自动转换。
例子:浮点数×整数=浮点数
②强制类型转换:
格式:(数据类型) 表达式
定义:把表达式的运算结果强制转化成所需的数据类型(逆着方向转换)。
例子:(int)浮点数 × 整数 = 整数
通过(int)舍掉小数点后的数,再执行相乘。
二者区别:
强制类型转换就相当于把大型物件硬塞到小盒子里,逆着系统自动的转化方向,从高精度转变为低精度,其表达式的结果不会四舍五入。
自动类型转换则相反。
PS:注意“强制类型转换”的表达式范围
强制类型转换的表达式范围不同,则结果也不同。即:(int)p * w ≠ (int) (p*w)