为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Go
浮云间 2021-12-06 19:40:38
我理解整体,它改变了位0000 0000 0000 0000 0000 0000 0000 0111 << 10000 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 回答

?
忽然笑

TA贡献1806条经验 获得超5个赞

如果假定a一个整数,然后a << xa2^xa >> x分歧b2^x,在您使用整数除法。

在您描述的情况下,我看不到使用1<<16 | 3<<8 | 0代替的真正好处66304(除了炫耀您可以使用按位运算符,这在我看来是愚蠢的)。

但是有一些方法我认为它们是合理的(看看这个关于 iota constants 的问题)。

几个其他示例(不仅与 Go 相关):

  • 检查是否设置了第 n 位 x & (1<<n)

  • 设置第 n 位 x | (1<<n)

  • 许多其他的第 n 位操作。


查看完整回答
反对 回复 2021-12-06
?
慕尼黑8549860

TA贡献1818条经验 获得超11个赞

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

嵌入式系统利用按位操作来打开/关闭选项,任何需要自我可持续且不依赖于丰富的外部数据存储的系统都将从该技术中受益。


查看完整回答
反对 回复 2021-12-06
  • 2 回答
  • 0 关注
  • 233 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信