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

时间:2016-01-07 01:56:19

标签: go

我理解整体,它将位移到

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为什么要使用运算符。

2 个答案:

答案 0 :(得分:1)

如果您假定a为整数,则a << xa2^x相乘,a >> xb除以2^x ,你使用整数除法。

在您描述的情况下,我发现使用1<<16 | 3<<8 | 0而不是66304没有任何实际好处(除了show-off,您可以使用按位运算符,这在我的愚蠢观点中是愚蠢的)。

但有些方法我认为它们是合理的(看看这个question about iota constants)。

其他一些例子(不仅与Go有关):

  • 检查第n位是否设置为x & (1<<n)
  • 设置第n位x | (1<<n)
  • 第n位的许多其他操作。

答案 1 :(得分:0)

当您需要小内存占用时,能够使用单个字节来保存256个不同的选项而不是使用大字符串数组或更多字节,那么您将使用这些。

嵌入式系统利用逐位操作来打开/关闭选项,任何需要在某种程度上可自我维持且不依赖于丰富的外部数据存储的系统都将受益于此技术。