"0 1 + 1"到底是等于 0 还是 1?
昨天碰上这个问题,着实把我坑惨了,花了一个晚上搞明白,python 和 golang 按位移动运算符的优先级居然不一样
python:
print(0 << 1 + 1)
输出:0
golang:
import "fmt"
func main() {
fmt.Println(0 << 1 + 1)
}
输出:1
为了让python和golang的行为一致,我只好为表达式里的"0 << 1"加了括号
感谢提醒,但像我这种菜鸟都是一堆括号的,如果有人说括号看晕,他是连工具都不会用的比我更菜的鸟。
感觉 0 好理解一点儿…
凡是有歧义的一律加括号
不加括号的话 Java 的计算结果也是 0
不同类型的操作符混合肯定是要加括号,就算自己能肯定顺序别人也不一定明白。
Pascal 里面 and 和 or 优先级比数学运算还高(因为同时被视为位运算符
判断条件就一直一堆括号,习惯了除了日常习惯的(基本就是四则运算)或者倒错就会立刻严重出错(比如 4/2-2 ,或者矩阵运算)的或者符合结合律的运算以外都加括号。
因为只有 go 的操作符优先级是 移位优先于加减 的
其他 java python c 都是 加减优先于移位
头像不错
我猜一会就有人跳出来说基本功 balabala 的
不用在意这种事,加括号解决完事,大家看着都清晰方便。
这种一般只有某些考试里会考,真使用时用不上这些知识。
工作这么多年除了之前写嵌入式用到了位移,现在写 WEB 基本没用过
看具体的语言吧,本人只熟悉 C ,C 里面+
> <<
,所以结果上述结果是 0 。
一般除了加减乘除这种运算,一律加括号
位移运算必加括号,血(不是)的教训。
fmt.Println(0<<1 + 1)
go 会按优先级自动格式化,建议其他语言学习
我看谁还嘲笑 lisp 括号罗嗦
加个括号很难么?别人不知道,要是我在实际生产环境中发现这种代码,直接开骂
i+++++i-----的变种? 这种不直接打残?
即使很熟悉运算符优先级,在书写可能有歧义的数学表达式时也尽可能加上括号
没必要纠结这种东西,啥,你说面试有人问?我反手就给他一巴掌
这种的意义是啥, 就像 ++i+++=++i++, 没有任何意义
“嘲笑 lisp 括号罗嗦”本来就是菜鸟行为
本站就不少。
涉及到位运算的,还是都加上括号吧。位运算本身就不是非常优美,多加点括号啰嗦一下也没什么事。
不同语言运算符优先级不一样,位运算在 C 系里优先级很低的
遇事不决加括号,编程不仰赖记忆力
先乘除后加减,其他尽量都上括号,
都说加括号,我不太一样,我宁可多用一个变量然后分两步写,位运算尽量分开,方便 debug
直接上括号,但凡你会一种以上的语言,深究这种语法细节有啥意义
developer.apple.com/documentation/swift/swift_standard_library/operator_declarations
用正确的思路 设计正确的程序
我不想,我直接加括号。
这个看具体的代码类型。
如果是表示的是具体的业务,特别是现实中的商务订单处理这类,当然应该尽量分开。
如果是对一张照片里的每个图素都进行一次变换操作,这么写代价就太大了。
我从来不考虑这个。像 Index.py 的路由,我至今记不清优先级,于是我都是
app.router << ("/client" // client_routes) << ("/auth" // auth_routes)
😓另外,考这个的多少有点魔怔了
不同语言的操作符优先级有可能不一致。反正加括号最保险,也更容易阅读。
楼主说的是 不同语言 运算符优先顺序不一样的问题,结果一堆“加括号”的评论,这不是废话吗?这是常识,就像乘号优先于加号一样。不应该讨论下为什么位运算符优先级不同语言不一样?
在StakeOverflow上有这样一个贴子叫“Confessions of your worst WTF moment”(WTF就是What the fuck的缩写),挺有意…
移动硬盘安装 win to go ,电脑 bios 设置 usb 为第一启动项。 win10 肯定可以,win11 没试过。 win to go 限制挺多的,我是想用移…
最近安全事件 苹果扫描儿童 sexy 网友谷歌网盘储存小姐姐,文件被删 各大输入法对剪贴板的读取。 越发觉得互联网公司没有底线,世界巨头也是如此。 我的开发的相册也在紧急开发…