The C Programming Language(第 2 版) 笔记 / 2 类型、运算符与表达式 / 2.10 赋值运算符与表达式

目录、参考文献


2.10 赋值运算符与表达式

在赋值表达式中,如果表达式左边的变量重复出现在表达式的右边,如 i = i + 2
则可以将这种表达式缩写为 i += 2,其中的运算符 += 称为赋值运算符

大多数二元运算符(即有左、右两个操作数的运算符,比如 +)都有一个相应的赋值运算符 op=
其中,op 可以是下面这些运算符之一:+-*/%<<>>&^|

如果 expr1expr2 是表达式,那么 expr1 op= expr2 等价于:expr1 = (expr1) op (expr2)
它们的区别在于,前一种形式 expr1 只计算一次
注意,在第二种形式中,expr2 两边的圆括号是必不可少的
例如 x *= y + 1 的含义是 x = x * (y + 1),而不是 x = x * y + 1
举例说明:函数 bitcount 统计整型参数中为 1 的二进制位的个数

/* bitcount: count 1 bits in x */ 
int bitcount(unsigned x) 
{ 
    int b; 
    for (b = 0; x != 0; x >>= 1) 
        if (x & 01) 
            b++; 
    return b; 
}

这里将 x 声明为无符号类型是为了保证将 x 右移时,无论该程序在什么机器上运行,左边空出的位都用 0(而不是符号位)填补

除了简洁外,赋值运算符还有一个优点:表示方式与人们的思维习惯比较接近
我们通常会说 “ 把 2 加到 i 上 ” 或 “ 把 i 增加 2
而不会说 “ 取 i 的值,加上 2,再把结果放回到 i 中 ”
因此,表达式 i += 2i = i + 2 更自然
另外,对于复杂的表达式,如:

yyval[yypv[p3+p4] + yypv[p1+p2]] += 2

赋值运算符使程序代码更易于理解,代码的阅读者不必煞费苦心地去检查两个长表达式是否完全一样
也无须为两者为什么不一样而疑惑不解,并且,赋值运算符还有助于编译器产生高效代码

从上述例子中我们可以看出,赋值语句具有值,且可以用在表达式中
下面是最常见的一个例子:

while ((c = getchar()) != EOF)

其它赋值运算符(如 +=-= 等)也可以用在表达式中,尽管这种用法比较少见

在所有的这类表达式中,赋值表达式的类型是它的左操作数的类型,其值是赋值操作完成后的值


目录、参考文献

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值