簡體   English   中英

Bitshifting:有人可以解釋這段代碼的作用嗎?

[英]Bitshifting: Can someone explain what this code does?

所以,我正在讀一本關於Go(The Way to Go by Ivo Balbaert)的書,其中有一個代碼示例:

const hardEight = (1 << 100) >> 97

由於我沒有在這台機器上安裝Go,我決定將它翻譯成PHP以查看結果(通過http://writecodeonline.com/php/,因為我沒有在這台機器上安裝PHP):

echo (1 << 100) >> 97;

上面的結果是8 ....呵呵? 所以我寫了決定好的,讓我們寫一個從0到100的for循環,看看結果:

for($i = 0; $i <= 100; $i++){
    echo $i . ": ";
    echo ($i << 100) >> 97;
    echo "<br>";
}

但結果是:

0: 0
1: 8
2: 16
3: 24
4: 32
5: 40
6: 48
7: 56
8: 64
9: 72
10: 80
11: 88
12: 96
13: 104
14: 112
15: 120
16: 128
17: 136
18: 144
19: 152
20: 160
21: 168
22: 176
23: 184
24: 192
25: 200
26: 208
27: 216
28: 224
29: 232
30: 240
31: 248
32: 256
33: 264
34: 272
35: 280
36: 288
37: 296
38: 304
39: 312
40: 320
41: 328
42: 336
43: 344
44: 352
45: 360
46: 368
47: 376
48: 384
49: 392
50: 400
51: 408
52: 416
53: 424
54: 432
55: 440
56: 448
57: 456
58: 464
59: 472
60: 480
61: 488
62: 496
63: 504
64: 512
65: 520
66: 528
67: 536
68: 544
69: 552
70: 560
71: 568
72: 576
73: 584
74: 592
75: 600
76: 608
77: 616
78: 624
79: 632
80: 640
81: 648
82: 656
83: 664
84: 672
85: 680
86: 688
87: 696
88: 704
89: 712
90: 720
91: 728
92: 736
93: 744
94: 752
95: 760
96: 768
97: 776
98: 784
99: 792
100: 800

有人可以向我解釋一下該片段的內容嗎? 我知道它的位移,但我不明白位移很好,以辨別那里發生了什么。 謝謝 :)

使用1作為示例(循環通過0-100,但它的所有主體都是相同的主體)從括號內的內容開始:

(1 << 100)

將在數字1上左移100個位置。 這給你1然后是100個零。 然后,這個非常大的數字(稱為googol )被右移97,這讓你:

1000

這是十進制數字8的二進制表示。對於其他數字,它們首先轉換為二進制(因此2變為10,3變為11等...)並應用計算。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM