2013-12-10 59 views
-1

這是我的功能。在這個函數中有兩個參數值和多少位移位。javascript - 如何反轉按位移?

function test(Value, ShiftBits) { 
return (Value << ShiftBits) | (Value >>> (32 - ShiftBits)); 
}; 

現在我想使這個功能相反。在這個測試()函數,如果我把

test(105748,7); 

它返回13535744;

現在我需要做一個函數一樣,如果我把

rev_test(13535744,7); 

返回105748;

任何幫助讚賞。

+2

你爲什麼把Python的標題? – Joe

回答

2

爲什麼不反轉邏輯?我拼寫出來如下:

Number.prototype.zeroFillBin = function() { 
    var s = this.toString(2); 
    while (s.length < 32) s = '0' + s; 
    return s; 
} 

function test(val, bits) { 
    return (val << bits) | (val >>> (32 - bits)); 
}; 

function rev_test(val, bits) { 
    return (val >>> bits) | (val << (32 - bits)); 
}; 


x = 105748; 
y = test(x, 7); // return 13535744 
console.log(x + ' = ' + x.zeroFillBin()) 
console.log(y + ' = ' + y.zeroFillBin() + '\n'); 

x = 13535744; 
y = rev_test(x, 7); // return 105748 
console.log(x + ' = ' + x.zeroFillBin()) 
console.log(y + ' = ' + y.zeroFillBin() + '\n'); 

結果:

105748 = 00000000000000011001110100010100 
13535744 = 00000000110011101000101000000000 

13535744 = 00000000110011101000101000000000 
105748 = 00000000000000011001110100010100 
+0

謝謝@Polywhirl – Shawon

+0

NP。 [查看此](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Bitwise_Operators)瞭解更多關於按位運算符的信息。 –

0
105748 << 1 // 13535744 
13535744 >> 1 // 105748