2013-12-10 1 views
-1

이것은 제 기능입니다. 이 함수에는 두 개의 매개 변수 값과 몇 비트가 시프트되어 있습니다.자바 스크립트 - 어떻게 비트 시프트를 되돌릴 수 있습니까?

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

이제이 기능을 반대로하고 싶습니다. 이 테스트() 함수에 넣어 경우

test(105748,7); 

반환합니다 13535744; 내가

rev_test(13535744,7); 

는 105,748을 돌려 놓는다면

지금 나는, 같은 기능을해야;

도움 말 감사합니다.

+2

이 왜 제목에 파이썬을 넣어 않았다 나는 아래 그것을 밖으로 철자? – 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. Bit-wise 연산자에 대한 자세한 내용은 [여기를 확인하십시오] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Bitwise_Operators)를 참조하십시오. –

0
105748 << 1 // 13535744 
13535744 >> 1 // 105748 
관련 문제