登录
首页 >  Golang >  Go问答

Golang 读者:为什么使用按位运算符 << 写入 int64 数字

来源:stackoverflow

时间:2024-02-12 18:09:21 294浏览 收藏

在IT行业这个发展更新速度很快的行业,只有不停止的学习,才不会被行业所淘汰。如果你是Golang学习者,那么本文《Golang 读者:为什么使用按位运算符

问题内容

在处理 go 阅读器时,我遇到了以下代码,以限制通过分段上传发送文件时从远程客户端读取的字节数(例如在 postman 中)。

r.Body = http.MaxBytesReader(w, r.Body, 32<<20+1024)

如果我没记错的话,上面的表示法应该代表 33555456 字节,或者 33.555456 mb (32 * 2 ^ 20) + 1024。或者这个数字不正确?

我不明白的是:

  • 作者为什么要这样使用它?为什么使用 20 而不是其他数字?
  • 作者为什么使用 +1024 符号?他为什么不写 33 mb?
  • 直接把33555456写成int64可以吗?

正确答案


如果我没记错的话,上面的表示法应该代表 33555456 字节,或者 33.555456 mb (32 * 2 ^ 20) + 1024。或者这个数字不正确?

正确。您可以自己简单检查一下。

fmt.Println(32<<20+1024)

他为什么不写 33 mb?

因为这个数字不是 33 mb。 33 * 1024 * 1024 = 34603008

直接把33555456写成int64可以吗?

当然。无论如何,这就是编译过程中可能会减少到的情况。一旦你弄清楚了 32、20 和 1024 背后的逻辑,这个符号可能会更容易阅读。

为了便于阅读,我几乎总是(在不使用 ruby​​ 时)将“50 mb”这样的常量写为 50 * 1024 * 1024,将“30 天”写为 30 * 86400 等。

理论要掌握,实操不能落!以上关于《Golang 读者:为什么使用按位运算符

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>