猿问

左移和右移按位运算符>>和<<的用法是什么

我理解整体,它改变了位


0000 0000 0000 0000 0000 0000 0000 0111 << 1

0000 0000 0000 0000 0000 0000 0000 1110

但是你为什么要使用这些左移和右移运算符而不是仅仅输入数字,使用这些运算符实际上有什么好处。


我在 Stackoverflow 上看到了很多答案以及操作员完成了什么,但是没有人说为什么他们会12345像我说的那样使用它而不是像我说的那样使用它,为什么使用它们以及它们比仅仅输入你正在尝试的数字有什么好处要得到?


我在 github 上浏览一个包时遇到了这段代码:


// ClientVersion is the protocol version that Client implements.

const ClientVersion = 1<<16 | 3<<8 | 0

出来的数字是: 66304


因此,如果这是一个常量,为什么不直接键入const ClientVersion = 66304为什么要使用运算符。


浮云间
浏览 234回答 2
2回答

忽然笑

如果假定a一个整数,然后a << x乘a用2^x和a >> x分歧b的2^x,在您使用整数除法。在您描述的情况下,我看不到使用1<<16 | 3<<8 | 0代替的真正好处66304(除了炫耀您可以使用按位运算符,这在我看来是愚蠢的)。但是有一些方法我认为它们是合理的(看看这个关于 iota constants 的问题)。几个其他示例(不仅与 Go 相关):检查是否设置了第 n 位&nbsp;x & (1<<n)设置第 n 位&nbsp;x | (1<<n)许多其他的第 n 位操作。

慕尼黑8549860

当您需要较小的内存占用时,能够使用单个字节来保存 256 个不同的选项而不是使用大字符串数组或更多字节,那么您将使用这些。嵌入式系统利用按位操作来打开/关闭选项,任何需要自我可持续且不依赖于丰富的外部数据存储的系统都将从该技术中受益。
随时随地看视频慕课网APP

相关分类

Go
我要回答