表达式

  • 算术运算符,加减乘除
  • 关系运算符,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被改变了

posted @   kartone  阅读(295)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
点击右上角即可分享
微信分享提示