uusyz 发表于 2019-11-28 21:10:00

<带你学C带你飞>E10疑惑

1) E10第六题中 E. a = b - c || a % b && c / d , 小甲鱼的答案是写成:a = ((b – c)4 || ((a % b)1 && (c / d)2)3)5 而我认为 b - c 的优先级要优于 (a % b) && (c / d) , 请问各位鱼油怎么看?
2) 负号和减号不都是 "-" 么, 编程时如何区分?

倒戈卸甲 发表于 2019-11-28 23:07:52

四则运算符的优先级肯定高于逻辑运算符,所以b-c可以不加括号,小甲鱼习惯加括号,标注的次序也是加完括号后的"理想"次序。
后一个问题,负号运算符与减法运算符的优先级差别不大,而且一个是双目运算符一个是单目运算符,也很难混淆。稍微想想很容易就理清楚其中的逻辑。如果你是问编译时如何区分它们。是这样,负号运算符是一个从右往左结合的运算符,而减法运算符是一个从左往右结合的运算符。举个例子,3-2,从左往右编译代码,遇到“-”时,将其合法理解为减法就没有然后了。但是如果一个单独的-2,从左到右编译到“-”时显然将其理解为减法是不合法的,需要再看一眼后面的2,然后才知道应该将2与“-”结合为“-2”。总结就是,这两者由于是同一个符号,不能用优先级来反过来去区分它们,而是从左往右读取代码时直接从语法逻辑上区分开来
页: [1]
查看完整版本: <带你学C带你飞>E10疑惑