C语言之运算关系
(1)语法: a和b的类型相同,且必须满足自动类型转换规则
(2)运算法则:如果a和b的类型不满足要求,编译器会尝试自动转换:
注意:不要比较两个浮点数是否相等,因为浮点数在计算机中的二进制可能存在误差,所以如果要比较按如下比较
假设a和b是两浮点数
判断等于的时候,就是if(fabs(a-b)<=1E-6)。(fabs是浮点数绝对值的函数,1E-6就是0.000001)
判断大于的时候,就是if(a>b && fabs(a-b)>1E-6)。
判断小于的时候,就是if(a<b && fabs(a-b)>1E-6)。
2.逻辑运算(&& , || , !)
(1)a && bA.首先计算a, 确定a的真假
B.如果a为假, 不计算b,表达式的结果为假
如果a为真, 再计算b, 最后计算整个表达式的结果
(2)a || b
A.首先计算a, 确定a的真假
B.如果a为真, 不计算b,表达式的结果为真
如果a为假, 再计算b, 最后计算整个表达式的结果
(3)!a
首先计算a,再计算!a
例:已知 int a = 5, b = 6; int c;
c = (a > b) && (b++) || (++a);(1) 计算 a > b 为假
(2) 确定 (a > b) && (b++) 为假, 没有计算b++
(3) ++a 为6,a为6 ,b还是为6
(4) 确定 (a > b) && (b++) || (++a)为真(1)
(5) c = 1
3.逗号运算
运算法则:如果操作数是表达式, 从左到右依次计算,最后一个操作数的结果作为整个表达式的值(值, 类型)
例: int a = 5, b = 6,c=0;c=(a + 1, b + 2, a++, b + 3);
a 为 6,括号内整个表达式的值为9,即c=9
4.取余运算
运算规则:商(可以是负数)乘以除数的绝对值要小于被除数的绝对值,再相减取余数(可以是负数)
例:5 % (-4) = 1 (-5) % 4 = -1 (-5)%(-4)= -1
-1 -1 1
----- ----- -----
-4 | 5 4 | -5 -4| -5
4 -4 -4
----- ----- ------
1 -1 -1
注意:逻辑位运算(&,|,~,^)也需遵循以下规则:
1. a和b的类型必须相同, 且必须满足自动类型转换规则, 不能是浮点型
如果a和b的类型不同,编译器尝试自动转换,结果根据自动类型转换规则来定
2. & 的作用是位清零,| 的作用是位置1,~ 的作用是整体取反,^ 的作用是位取反