비트 연산자는 이해하기 어렵습니다. 루비 코드를 자세히 설명 할 수 있습니까?루비 프로그래밍의 비트 연산자
def res(n)
~(~1<<((2*n)>>1))
end
res(5) --> 63
비트 연산자는 이해하기 어렵습니다. 루비 코드를 자세히 설명 할 수 있습니까?루비 프로그래밍의 비트 연산자
def res(n)
~(~1<<((2*n)>>1))
end
res(5) --> 63
첫째, 연산자 우선 순위 이해하자 2
>>1
에 의해 # 5 3 4 1 2
~(~1<<((2*n)>>1))
2*n
곱 n
이 두 작업은 완전히 중복 만들기 2
하여 결과를 분할, 원래의 코드는 100입니다 %와 동등한 %는 ~(~1<<n)
0b01
것이 -2
입니다 -0b10
,base<<power
가, 배의 전력이다 따라서 우리는 -2^(5+1) = -64
-0b1000000
에서 0b0111111
을 생산해야하는 bitwise complement이다.우수 답변! 가장 안쪽의 괄호 세트가 중복된다는 것을 주목하라. ((2 * n) >> 1) == (2 * n >> 1) # => true'. –
업데이트 편집.
우리는 무슨 일이 벌어지고 어떤 순서로 여기에 있을지도 모릅니다. 먼저 표현의 중복성에 대한 첫 번째 답변에 공헌 해주십시오. 나는 간단한 것으로 시작한다.
def bitwise_complement_bits(args)
~ args
end
def bitwise_shift_left(o, n)
o << n
end
a = bitwise_complement_bits(1)
b = bitwise_shift_left(a, 5)
p bitwise_complement_bits(b)
업데이트 편집 : 난 그냥 우리가 여기서 무엇을했다에 붙여
Here's a nifty site for some quick evaluation of code.
. 당신은 거기에 발을 디디면서 실제로 무슨 일이 벌어지고 있는지 보게 될 것입니다.
또는 repl.it뿐만 아니라 직접 설치할 수도 있습니다. https://repl.it/languages/ruby 재미있게 보내십시오!
간결한, 요점과 직접 직접 문제를 해결합니다. 기다림... – cobaltsoda
[비트 시프트 (비트 시프트) 연산자 란 무엇이며 어떻게 작동합니까?] (http://stackoverflow.com/questions/141525/what-are-bitwise-shift-bit-shift-operators -and-how-do-they-work) –
@EliSadoff 연결된 질문에'~'에 대한 언급이 없습니다. –
함께 거기에 묶여있다. 어떤 유용한 목적이 있습니까 아니면 누군가의 샘플/예일뿐입니다? –