表达式
作者:互联网
- 算术运算符,加减乘除
- 关系运算符,i>0的比较运算
- 逻辑运算符,i比0大且比10小的关系运算
算术运算符
除%运算符外,+-*/允许操作数为整数或浮点数。int型和float型放在一起,运算结果是float型的。
- 对于/,两个操作数都为整数,会丢掉分数部分。1/2 = 0
- %要求操作数为整数
- C89中,i/j可以向上取入,也可以向下取入,如-9/7结果可以为-2或-1,i%j不确定,与具体实现有关,-9%7结果可能为-2或5
- C99中,i/j趋零结尾,-9/7 = -1,i%j符号与i相同,-9%7 = -2(当前Clion版本也是这样)
有限性和结合性
算术运算符优先级
最高优先级:+ - (一元运算符,判断正负)
*/ %
最低优先级:+ - (二元运算符)
举例:
i + j * k 等价于 i + (j * k)
-i * -j 等价于 (-i) * (-j)
+i + j / k 等价于 (+i) + (j / k)
结合性
运算符从左向右结合成为左结合
-
二元运算符(* / % + -)都是左结合
-
一元运算符(+ - )都是右结合
- -+i 等价于 -(+i)
推荐加括号,省事
赋值运算符
简单赋值
int i;
float f;
i = 72.99f;// i = 72
f = 136; // f = 136.000000
v = e,如果v和e的类型不同,会把e的值转换为v类型(变化右边)
i = 1求值的结果为1
= 右结合
多个赋值号可以串联在一起
i = j = k = 1
i = (j = (k = 1))
左值
赋值运算符要求左操作数必须为左值
左值表示对象,目前变量是唯一左值
复合赋值
右结合
i += j += k
i += (j += k)
自增运算符和自减运算符
后缀++--优先级高于正负号,左结合
前缀++--优先级等于正负号,右结合
i++不是立即加1,++i是立即加1
表达式语句
- 任何表达式都可以用作语句
i++;
i = 1;
i * j - 1;
i + j;
// 什么都不做的表达式语句
Q&A
想把%用于浮点数
double fmod(double x, double y);
fmod函数返回第一个参数除以第二个函数所得的余数
例:fmod(5.5, 2.2) --> 1.1
如果v有副作用,则v+= e 不等价于 v = v + e
a[i++] += 2
a[i++] = a[i++] + 2
第二种是未定义的行为
自增和自减运算符也可用于浮点数,但是不常用
i = 1;
把1赋给i,整个表达式的值是1,这个值被丢弃掉了,但是i被改变了
标签:++,左值,运算符,结合,表达式,赋值 来源: https://www.cnblogs.com/bboy-kartone/p/15863816.html