2014-10-17 2 views
1

어떻게 바이너리에서 비트 오른쪽 시프트를 수행 할 수 있습니까?바이너리에 비트 오른쪽 시프트 연산자를 적용하는 방법은 무엇입니까?

>>의 JS는 정수에 적용됩니다. 따라서 6 >> 1 (비트 오른쪽으로 시프트 1)은 3을 결과 (110 >> 1 = 011 - 올바른 것)로 표시합니다. 그것은 좋지만 ... 바이너리로 시프트 우 연산자로 작업 할 수 있습니까?

올바르게 작동하려면 110 >> 1이 필요합니다. 그러면 결과가 55로 표시되고 올바른 것입니다. 110은 01101110입니다. 01101110 >> 1 = 00110111. 00110111은 55입니다. 맞습니다. 하지만 결과로 011을 원합니다! 내가 js에서 이걸 어떻게 할 수 있니?

+3

숫자를 10으로 나누십시오. – thefourtheye

+3

또한 왜 이것을 원하니? – Cameron

+0

명백한 문제 : 그것은 바이너리가 아닙니다. 숫자 1과 0 만있는 십진수입니다. – harold

답변

3

이것은 마치 문자열 조작처럼 보입니다. 방법에 대해 : 또는

function shr(x, s) { 
    return 
     new String('0', Math.min(s, x.length)) + 
     x.substr(0, Math.max(0, x.length - s)); 
} 

>>> shr('110', 1) 
'011' 

, 당신은 일반적인 비트 연산자를 사용하여 간단하게 사전에 (한 번) 문자열 표현으로 변환하고, 이후에 (한 번) 문자열 표현으로 다시 변환 할 수 있습니다.

1

여기에 그것을 할 수있는 하나 개의 방법 :

(parseInt("110",2) >> 1).toString(2)  // gives "11" 

parseInt가 매개 변수로 radix을 할 수 있습니다, 그래서 당신은 2를 전달할 경우는 바이너리로 문자열을 처리합니다. 따라서 숫자로 변환 한 후 이진 문자열로 다시 변환하려면 toString (편리하게는 radix을 매개 변수로 사용합니다)을 사용하십시오.