Golang, mid := l + r >> 1

75 天前
 houhaibushihai

Go mid := l + r >> 1mid := (l + r) >> 1 会有不同的结果是吗?

用 Go 刷算法题,发现这里常常卡错误,使用第二个加括号可以正确 AC 第一个+优先级高于>>,应该也是正确的,但是得到的mid应该和第二个不一致,因为无法通过判题

1630 次点击
所在节点    Go 编程语言
6 条回复
zidy
75 天前
https://go.dev/ref/spec#Operator_precedence
>> 优先级比 + 高。

mid := l + (r-l)>>1
Kisesy
75 天前
你放到编辑器里,格式化一下,哪个离得近,哪个优先级高,例如: mid := l + r>>1
houhaibushihai
75 天前
@zidy 啊,谢谢~

是我想当然了,这点跟其它语言不一样
spritecn
75 天前
@houhaibushihai 个人感觉 位移优先更合理,习惯性的以为+-优先级最低
我是习惯给加减括号起来的,不管啥语言,看见加号就觉得低人一等
spritecn
75 天前
不确定就括起来,不丢人
wuhunyu
75 天前
我一直是括起来的,这样就不需要记不同语言的优先级区别.就是有时候括号多了影响阅读(如果不嫌烦可以使用换行来分隔复杂的表达式),虽然有插件可以做到颜色匹配,但这对色弱来说也不友好

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1151915

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX