Bitshifting:有人可以解释这段代码的作用吗?

时间:2014-02-11 16:38:15

标签: php go bit-manipulation

所以,我正在读一本关于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 :(得分:2)

使用1作为示例(循环通过0-100但是它的所有原则相同) 从括号内的内容开始:

(1 << 100)

将在数字1上左移100个位置。这给你1然后是100个零。然后,这个非常大的数字(称为googol)向右移动了97,这使你得以:

1000

这是十进制数字8的二进制表示。对于其他数字,它们首先转换为二进制(因此2变为10,3变为11等等)并应用计算。

相关问题