Dot*_*Dot 13 programming-languages bit-shift go bitwise-operators
我正在寻找有关Google Go语言的信息.在"A Tour of Go"中他们有这样的代码:
const (
Big = 1<<100
Small = Big>>99
)
Run Code Online (Sandbox Code Playgroud)
但是做什么<<和>> 意味着什么?
您可以在http://tour.golang.org/#14上查看所有代码
Jon*_*rdy 26
它们是按位移位运算符.x << y表示x ×2 y,而x >> y表示x ×2 -y或等效地,x÷2 y.这些运算符通常用于操纵值的二进制表示,其中,就像十进制的10的幂,乘以或除以2的幂,分别具有"向左或向右"移位数字的效果:
// Left shift:
13 * 2 == 26 // decimal
1101 * 10 == 11010 // binary (13 is 8 + 4 + 0 + 1)
// Right shift (brackets denote discarded portion):
13 / 2 == 6[.5] // decimal
1101 / 10 == 110[.1] // binary
Run Code Online (Sandbox Code Playgroud)
因为您对整数进行操作而右移通常会产生小数值,所以有几种方法可以处理右移的结果如何舍入.在Go中,右移是无符号值的逻辑移位和有符号值的算术移位.逻辑移位总是向零舍入,而算术移位总是向下舍入,即向-∞.
从规格:
Arithmetic operators
...
<< left shift integer << unsigned integer
>> right shift integer >> unsigned integer
Run Code Online (Sandbox Code Playgroud)
还有一点:
移位运算符将左操作数移位右操作数指定的移位计数.如果左操作数是有符号整数,则它们实现算术移位;如果是无符号整数,则它们实现逻辑移位.班次计数没有上限.对于移位计数n,移位的行为就好像左操作数被移位n次1.结果,x << 1与x*2相同,x >> 1与x/2相同,但截断为负无穷大.
这些是左移和右移运算符。它们与C语言及其衍生语言相同。
x << y
Run Code Online (Sandbox Code Playgroud)
是x的2乘以y的幂
x >> y
Run Code Online (Sandbox Code Playgroud)
x被2除以y的幂(小数部分被舍弃)
如果将数字视为二进制,则乘以2的幂会将位左移(101 * 2 ^ 3变为101000),其方式与十进制乘以10的幂相同,即将数字左移(12340 * 10 ^ 3变成12340000)。相反,除以2的幂是正确的。它会将二进制表示形式向右移动。由此得名。顺便说一句,这是计算机执行的一种非常快速的操作,因此,它在诸如密码学之类的性能关键位旋转应用中被大量使用。