[个人笔记] 三元表达式的奇怪bug, 运算符优先级, 运算符贪心法则 C++

看下面一段奇怪的代码:

想实现的功能是当now value的值大于10的时候, now value 值减10并且进位置1

结果carry偏偏不为1;

 

原因:

其实是三元运算符的优先级比逗号的高, 这行代码被识别成了:
 

	(nowval>=10? nowval-=10,carry=1 : nowval = nowval),(carry = 0);

 

 

逗号的优先级是最低的, 所以在逗号和其他运算符混着用的时候,一定要加括号!

加上括号就好多了!

 

运算符的贪心规则:

开始时候以为是和运算符贪心规则有关系, 以为三元运算符尽可能的少接纳变量

其实不然.

C++运算符贪心规则:

C语言有这样一个规则,每一个符号应该包含尽可能多的字符。也就是说,编译器将程序分解成符号的方法是,从左到右一个一个字符地读入,如果字条可能组成一个符号,那么再读入下一个字符,判断已经读入的两个字符组成的字符串是否可能是一个符号的组成部分,如果可能,继续读入下一个字条,重复上述判断,直到读入的字符组成的字符串已经不再可能组成一个有意义的符号。这个处理的策略被称为“贪心法”。需要注意的是,除了字符串与字符常量,符号的中间不能嵌有空白(空格、制表符、换行符等)。

 

很有趣的一个Bug~ 

记得用括号!记得用括号!记得用括号!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

蜗牛小瀚

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值