c语言中乘法和除法哪个优先,c语言中,逻辑运算和赋值运算哪个优先级高?

&&(bputc(c,out);

“while”语句中要实现的功能是给变量c赋值,然后与EOF进行比较来终止循环,不幸的是,赋值操作的优先级低于比较操作的优先级,因此c的值是getc(in)与EOF比较的结果,getc(in)的值将被弃掉,因此拷贝生成的文件将是一连串的1。

想实现以上的功能并不困难,可以简单修改如下:

while ((c=getc(in)) != EOF)

putc(c,out);

然而,在复杂语句中,这种优先级混淆的问题是很难被发现的。在UNIX系统下面的几个不同版本的连接程序中曾经出现过如下的错误语句:

if( (t=BTYPE(pt1->aty)==STRTY) || t==UNIONTY ){

此条语句要实现的功能是给变量t赋值,然后判断是否与STRTY相等或者与UNIONTY相等,但是这条语句真正实现的功能并不是这样。

C语言中,逻辑运算符的优先级分配有其历史的原因。B语言,也就是C语言的前身,也有相当于C语言中的 & 和 | 操作符,尽管它们被定义用作位运算符,但是当用于条件上下文时,编译器会自动将它们当作 && 和 || 运算。

C++/C语言的运算符有数十个,运算符的优先级与结合律如表所示。注意一元运算符+ - *的优先级高于对应的二元运算符。

??下表中包括了C++所有的操作符,共有16级优先级。表中的操作符如果重复出现,则第1次出现的是单目运算符,第二次出现的的双目运算符。

优先级

运算符

结合律(从高到低排列)

1

?() [] -> :: .

左→右

2

?! ~ + - ++ -- & * (强制转换类型) sizeof new delete

右→左

3

?.* -> *

左→右

4

?* / %

左→右

5

?+ -

左→右

6

?<< >>

左→右

7

?< <= >= >

左→右

8

?== !=

左→右

9

?&

左→右

10

?^

左→右

11

?|

左→右

12

?&&

左→右

13

?||

左→右

14

??:

右→左

15

?= *= /= += -= |= <<= >>= %= &= ^= &&= ||=

右→左

17

?'

左→右

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值