2011-08-18 4 views
5

Ruby에서 부호있는 또는 서명되지 않은 정수의 n 번째 비트를 가져와야합니다.Ruby 정수에서 비트 추출

x = 123 # that is 1111011 
n = 2 # bit 2 is ...0 

다음 코드 조각은 일반적인 경우에 작동하지 않습니다

때문에이 보완 적으로 표현하지 음수의
x.to_s(2)[-(n+1)] #0 good! but... 

: 그래서

-123.to_s(2) # "-1111011" 

진행 방법 ?

답변

12
x = 123 # that is 1111011 
n = 2 # bit 2 is ...0 

x[n] # => 0 

-123[2] # => 1 
+0

결과 1과 0이 반대로됩니다. 나는 성공하지 않고 당신의 포스트를 편집하려고 시도했다. – JCLL

+0

@ JCLL : 고마워! 그건 잘라 내기 및 붙여 넣기가 실제로 버그를 방지 할 수있는 경우입니다 .-) –

+4

Heh, 또 다른 멋진 Ruby 연산자 : []가 Fixnum에 있는데, 어쨌든 문서의 하루는 평이하지만 동시에 보이지 않게됩니다. – DigitalRoss

4
def f x, bit 
    (x & 1 << bit) > 0 ? 1 : 0 
end 
+0

참/거짓 결과 만 원하면 '? 1 : 0' – DigitalRoss

3

Bindata lib을 사용해보세요.

정수의 바이너리 표현을 문자열로 표현하는 함수가 있으며, 그 다음에 원하는대로 할 수 있습니다.

관련 문제