"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)
😓另外,考这个的多少有点魔怔了
不同语言的操作符优先级有可能不一致。反正加括号最保险,也更容易阅读。
楼主说的是 不同语言 运算符优先顺序不一样的问题,结果一堆“加括号”的评论,这不是废话吗?这是常识,就像乘号优先于加号一样。不应该讨论下为什么位运算符优先级不同语言不一样?
公司有个运行在外网的生产环境,是 linux 早期版本,本着只要代码能运行,就没人去动的原则,内核一直比较老。 然后我想加一点小功能,想着现在 clang 那么强大了,跨平台…
一直在想有没有适合个人开发者又能带来盈利的方向活着细分领域?不知道大家是不是都有这样的困惑,做什么呢, 目前了解的主要有以下几个方向: 1.接私活 2.技术博客,内容输出,来做…
本人主力机是苹果,所以当时没保存书签,现在想换安卓手机 干净 性价比高 玩机大佬来说一下 nothing phone ? 一加 可以随意刷机 魅族 21三星 E7 屏幕,…