英文:
Golang readers: Why writing int64 numbers using bitwise operator <<
问题
我在处理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类型是否可以?
英文:
I have come across the following code when dealing with Go readers to limit the number of bytes read from a remote client when sending a file through multipart upload (e.g. in Postman).
r.Body = http.MaxBytesReader(w, r.Body, 32<<20+1024)
If I am not mistaken, the above notation should represent 33555456 bytes, or 33.555456 MB (32 * 2 ^ 20) + 1024. Or is this number not correct?
What I don't understand is:
- why did the author use it like this? Why using
20
and not some other number? - why the author used the notation
+1024
at all? Why didn't he write 33 MB instead? - would it be OK to write 33555456 directly as int64?
答案1
得分: 2
如果我没记错的话,上面的表示应该是33555456字节,或者33.555456 MB(32 * 2 ^ 20)+ 1024。这个数字是正确的吗?
正确。你可以自己简单地验证一下。
fmt.Println(32<<20+1024)
为什么他没有写成33 MB呢?
因为这个数字不是33 MB。33 * 1024 * 1024 = 34603008
直接将33555456写成int64类型可以吗?
当然可以。在编译过程中,它很可能被转换为int64类型。一旦你理解了32、20和1024之间的逻辑,这种表示法可能更容易阅读。
阅读的便利性是我几乎总是(当不使用Ruby时)将常量写成"50 MB"形式的50 * 1024 * 1024
,将"30 days"写成30 * 86400
等的原因。
英文:
> If I am not mistaken, the above notation should represent 33555456 bytes, or 33.555456 MB (32 * 2 ^ 20) + 1024. Or is this number not correct?
Correct. You can trivially check it yourself.
fmt.Println(32<<20+1024)
> Why didn't he write 33 MB instead?
Because this number is not 33 MB. 33 * 1024 * 1024 = 34603008
> would it be OK to write 33555456 directly as int64?
Naturally. That's what it likely is reduced to during compilation anyway. This notation is likely easier to read, once you figure out the logic behind 32, 20 and 1024.
Ease of reading is why I almost always (when not using ruby) write constants like "50 MB" as 50 * 1024 * 1024
and "30 days" as 30 * 86400
, etc.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论