看下面一段奇怪的代码:
想实现的功能是当now value的值大于10的时候, now value 值减10并且进位置1
结果carry偏偏不为1;
原因:
其实是三元运算符的优先级比逗号的高, 这行代码被识别成了:
(nowval>=10? nowval-=10,carry=1 : nowval = nowval),(carry = 0);
逗号的优先级是最低的, 所以在逗号和其他运算符混着用的时候,一定要加括号!
加上括号就好多了!
运算符的贪心规则:
开始时候以为是和运算符贪心规则有关系, 以为三元运算符尽可能的少接纳变量
其实不然.
C++运算符贪心规则:
C语言有这样一个规则,每一个符号应该包含尽可能多的字符。也就是说,编译器将程序分解成符号的方法是,从左到右一个一个字符地读入,如果字条可能组成一个符号,那么再读入下一个字符,判断已经读入的两个字符组成的字符串是否可能是一个符号的组成部分,如果可能,继续读入下一个字条,重复上述判断,直到读入的字符组成的字符串已经不再可能组成一个有意义的符号。这个处理的策略被称为“贪心法”。需要注意的是,除了字符串与字符常量,符号的中间不能嵌有空白(空格、制表符、换行符等)。
很有趣的一个Bug~
记得用括号!记得用括号!记得用括号!