英文:
Tour of Go exercise #17: double less operator
问题
在Go Tour的练习#17中,我不理解这个表达式1 << uint(i)
的含义。
这个操作符<<
是位左移操作符。在这个程序中,它用于计算2的幂。具体来说,1 << uint(i)
表示将数字1左移i位,相当于将1乘以2的i次方。
程序的输出结果是:
1
2
4
8
16
32
64
128
256
512
程序已退出。
英文:
In the Go Tour exercise #17, I don't understand this expression 1 << uint(i)
package main
import "fmt"
func main() {
pow := make([]int, 10)
for i := range pow {
pow[i] = 1 << uint(i)
}
for _, value := range pow {
fmt.Printf("%d\n", value)
}
}
What is the purpose of this operator ? <<
The program outputs:
1
2
4
8
16
32
64
128
256
512
Program exited.
答案1
得分: 7
这是一个二进制位移运算符,具体来说,它是一个左移运算符(因为它们指向左边)。
它的作用是将一个数字的二进制表示中的所有位向左移动。
例如,数字1的二进制表示是(假设每个字节有8位):00000001
。应用左移运算符后得到:
00000001
<<
00000010
这是数字2的二进制表示。再次应用左移运算符得到:
00000010
<<
00000100
这是数字4的二进制表示,依此类推。
相反,右移运算符 >>
则相反操作,所以将值4应用右移运算符后得到:
00000100
>>
00000010
得到数字2。
你可以使用右移运算符将遍历逆序,例如:
pow[i] = 512 >> uint(i)
英文:
Its a binary shift operator. Specifically, its a left shift (since they point to the left).
What it does, is move all bits in the binary representation of a number ... left.
For example. The binary representation of 1 is (with a safe assumption of 8 bits per byte): 00000001
. Applying a left shift produces:
00000001
<<
00000010
Which is the binary representation of 2. Applying it again produces:
00000010
<<
00000100
..which is the binary representation of 4.. and so on.
Conversely, a right shift >>
does the opposite, so applying >>
to the value 4, produces:
00000100
>>
00000010
..2.
You can change the tour to count backwards by using the right shift operator:
pow[i] = 512 >> uint(i)
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论