2013-06-05 41 views
3

我正在通過一些關於Stack的素數的代碼,並發現這一點。我是什麼意思?

我試圖與此實驗的某個時候並推斷此:

var i = 5; 
var j = 0; 

如果我寫 J = < < 1,它是所有受讓人(I * 2),即 - 10在這種情況下,以j

如果我寫 j = i < < 2,(i * 2)* 2即 - 10 * 2 .....等等。

現在我懷疑這個操作員究竟做了些什麼?

我試着用谷歌搜索這個,但沒有找到任何直接的解決方案。

+2

@SubirKumarSao - Java和JavaScript不是一回事(就像Car和Carpet不是一回事)。 – Quentin

+0

請在擊中stackoverflow之前做你的研究(谷歌)。 –

+0

@Quentin:就這個運營商而言,它們是完全一樣的東西。 –

回答

6

這些是在Javascript中的Bitwise Operators

按位運算符將它們的操作數視爲32位(零和1)序列,而不是十進制,十六進制或八進制數。例如,十進制數字9具有1001的二進制表示。按位運算符對這些二進制表示執行操作,但它們返回標準的JavaScript數值。

向左移位運算符:

一個< < B:檔一個在二進制表示B(< 32)位的左側,從右側的零移位。

+0

我想補充,他們在PHP中做同樣的事情。 –

+0

另外值得注意的是左操作數轉換爲int32,右操作數在執行操作前轉換爲uint32,依[spec](http://es5.github.io/#x11.7.1) 。 –

1

<<是左移運算符。每個位都會按照指定的次數向左移動。例如:n<<2將按位移n 2次,向右側添加零。

n=4 // 0000 0000 0000 0100 
n<<2 //<= 0000 0000 0001 0000 - Value is 16 
0

The << operator[ES5 spec]是左移位運算符。它將左邊的數字和右邊的數字相同的位置移位。例如,i << 2會將i的數字移到左邊的2個位置。

var i = 5; // i: 0000 0000 0000 0101 
i = i << 2; // i: 0000 0000 0001 0100