2014-10-10 42 views
0

Go Tour 37我面對陌生的表達1 << uint(i)雙少去旅遊經營者37

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) 
    } 
} 

什麼運營商<<呢?

該方案得到了輸出:

1 
2 
4 
8 
16 
32 
64 
128 
256 
512 

Program exited. 
+2

http://stackoverflow.com/q/5801008/6309和http://stackoverflow.com/q/9797431/6309 – VonC 2014-10-10 07:53:34

+2

如有疑問,請閱讀[規格](http://golang.org/ref/spec)。 – fuz 2014-10-10 09:52:41

回答

7

它的二進制移位運算符。具體來說,它是左移(因爲它們指向左側)。

它的作用是將數字的二進制表示中的所有位移到左邊。

例如。 1的二進制表示是(每個字節有8位安全假設):00000001。施加左移生產:

00000001 
<< 
00000010 

哪個是2施加它的二進制表示再次生產:

00000010 
<< 
00000100 

..這是4的二進制表示..等等。

相反,右移位>>則正好相反,所以施加到>>值4,生產:

00000100 
>> 
00000010 

..2。

您可以更改遊覽通過使用向右移位運算符倒數:

pow[i] = 512 >> uint(i)