2013-12-10 4 views
-1

Это моя функция. В этой функции есть два значения параметра и сколько бит сдвигается.javascript - Как отменить побитовый сдвиг?

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

Теперь я хочу сделать обратную функцию. В этой функции test(), если я положил

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

Спасибо @ Mr.Polywhirl – Shawon

+0

NP. [Проверьте это] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Bitwise_Operators) для получения более подробной информации о битовых операторах. –

Смежные вопросы