V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
The Go Programming Language
http://golang.org/
Go Playground
Go Projects
Revel Web Framework
houhaibushihai
V2EX  ›  Go 编程语言

Golang, mid := l + r >> 1

  •  
  •   houhaibushihai · 22 天前 · 1393 次点击

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

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

    6 条回复    2025-08-13 11:07:16 +08:00
    zidy
        1
    zidy  
       22 天前
    https://go.dev/ref/spec#Operator_precedence
    >> 优先级比 + 高。

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

    是我想当然了,这点跟其它语言不一样
    spritecn
        4
    spritecn  
       21 天前
    @houhaibushihai 个人感觉 位移优先更合理,习惯性的以为+-优先级最低
    我是习惯给加减括号起来的,不管啥语言,看见加号就觉得低人一等
    spritecn
        5
    spritecn  
       21 天前
    不确定就括起来,不丢人
    wuhunyu
        6
    wuhunyu  
       21 天前
    我一直是括起来的,这样就不需要记不同语言的优先级区别.就是有时候括号多了影响阅读(如果不嫌烦可以使用换行来分隔复杂的表达式),虽然有插件可以做到颜色匹配,但这对色弱来说也不友好
    关于   ·   帮助文档   ·   自助推广系统   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1528 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 21ms · UTC 00:00 · PVG 08:00 · LAX 17:00 · JFK 20:00
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.