一段骚代码 我没大意啊 翻车了

群友发的代码

https://cdn.learnku.com/uploads/images/202012/16/25979/3xN0bIjwjS.png!large

正确答案是

x = 2 
y = 1 
z = 1 
t = 1

优先级: (你们肯定不想百度了 我发出来吧)

优先级排名 运算符 结合方向
1 ++ (前置) 右到左
11 && 左到右
12 || 左到右

第一次理解

https://cdn.learnku.com/uploads/images/202012/16/25979/5pjtRLyFMM.png!large

t = ++x || ++y && ++z  
t = 2 || 2 && 2 
// 第一步 x = 2; y = 2; z =2;
// 第二步: 2 || 2 = 1
// 第三步: 1 && 2 = 1
// 第四步: t = 1
x = 2
y = 2
z = 2
t = 1
// 没毛病吧 哈哈。

第二次

https://cdn.learnku.com/uploads/images/202012/16/25979/q2drCyTXdc.png!large

(这是正确的)

严格的说: 先执行 ++ 再执行 && 和 || 才对啊,优先级让我懵逼。

问老师

https://cdn.learnku.com/uploads/images/202012/16/25979/vjXmpAyy4a.png!large

https://cdn.learnku.com/uploads/images/202012/16/25979/wDAYTOP8Zm.png!large

得到了满意的答案。
公式其实变成了:
t = (++x) || (++y && ++z)

先分界了,再按优先级执行的。

面试题 +1 (祈祷面试官不是什么魔鬼)

专心学习不瞎搞
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 11
Epona

讲道理,工作中这么写的,全都打死

2个月前 评论

我学废了 :joy:

讲真,如果是我之前遇到这样的面试,我就转身离开回去后我还会反思自己为什么会遇到这样的面试。
现在嘛,只要工资够高,你问我茴香豆有几种写法都行。

最近看到了一个关于程序员相关的一个国际比赛IOCCC(国际C语言混乱代码大赛),不得不说语法我都懂,但一行我都看不懂。这个题目和那些题都挺有意思的。

2个月前 评论
Epona

讲道理,工作中这么写的,全都打死

2个月前 评论

唉?我竟然做对了。貌似在学校考试时有过类似的题,当时还挺反感的。

2个月前 评论

多加几个括号的事,多写几行代码,少死几个脑细胞。 还有我只用:i+=1,i-=1;谁要是问我i++与++i的区别,我都不理他

2个月前 评论
gema 2个月前

t 应该等于 true 吧, || 的结果 应该只有 truefalse

2个月前 评论
gema 2个月前
ware (作者) 2个月前
codemonkey

嗯,|| 前面 true 了后面的不执行,是这样的

2个月前 评论

很多人都在想为什么要搞这种无聊的脑筋急转弯,算法题可以理解,考各种语法混到一起之后的运行结果,感觉真的是。一两道无所谓,面试遇到满卷子这种的转身就撤了,面试题考这种的公司也不会好到哪里去。纯属吐槽,这种题自己闲来做还是挺有意思的。

2个月前 评论

这和钓鱼执法是一样的。。。程序员这样写不被喷死

2个月前 评论

&& 和 and 优先级都不一样

2个月前 评论

前年做面试题经常遇到这个问题,当时也是这个问题,其实就运算符优先级;
||条件为真时不下面的逻辑不会走,先加加会返回,后加加不会返回;
可以试下

t=x--||++y||++z;
t=x--&&y--&z--;
2个月前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!