2015-10-25 24 views
1

說的權力,我有以下:移位向左實現冪對兩個JavaScript

var n = 3; 

我想2^n次方。

所以我可以做:

Math.pow(2,n) 

,等於8,味甜。

或者我可以這樣做:

1 << n 

這也等於8,味甜。

我想描繪位的轉變。

所以我認爲個n,在該示例中等於3,二進制記數法是:

即(1 * 2^1)+(1 * 2^0)= 3

於是我做了手術1 << n和位左移一個,我覺得1 << n輸出,以二進制表示,是這樣的:

比特左移一個位置,替換與零的第一比特但這等於6不是8:

即(1 * 2^2)+(1 * 2^1)+(0 * 2^0)= 6

不甜,位左移我計算該1 << n將基於我的二進制符號等於6後,1 << n不等於8,所以我的左位移位操作的二進制記數法是不正確

我或者正在起草3位編碼的二進制符號直接和/或我不移位正確的位在我的二進制符號輸出1 << n

任何人都可以提供一個解釋我的思維過程是不正確的?

+0

[如何顯示Shift Left Logical乘以2^n?](http:// stackoverflow。com/questions/11212510/how-to-show-that-shift-left-logical-multiply-by-2n) - 我意識到語言是不同的,但對於這個問題根本不重要。 –

+0

是的,這是正確的。不知道你正在尋找什麼有意義的答案。應該是你可以找到綽綽有餘的谷歌搜索的東西。 – jfriend00

+0

這個問題有點混亂,因此混淆的地方並不是100%清楚。例如,你說「我想要n^2權力」,但是「Math.pow(2,n)」是2^n,而不是n^2。稍後你會描述'1 << n',但是你的計算是針對'n << 1'。 – JJJ

回答

4

1 << n表示:在1的二進制表示的末尾加上n零。
產生1 * 2ⁿ = 2ⁿ。在你的情況下,2³ = 8 = 10002

n << 1表示:在n的二進制表示的末尾添加1零。
那產生n * 2¹ = 2*n。在你的情況下,2*3 = 6 = 1102

因此,問題在於你困惑了1 << nn << 1