2012-01-30 2 views
1

내가 자바 코드의 조각을 가지고 시프트. 나는 부호없는 오른쪽 시프트 연산자, 서명 된 오른쪽 시프트 연산자 만있는이 코드를 루비에 구현하려고합니다. >>> 연산자에 대해 잘 알고 있지는 않지만 루비에서 어떻게 구현했는지는 잘 모르겠습니다. 나는 누군가가이 문제점을 우연히 만났는지 알기 위해 몇 가지 검색을 시도했지만 관련성이없는 것을 찾지 못했습니다. 어떤 도움 더 이해 될 것이다 :루비 서명되지 않은 오른쪽

+0

'seed'의 값 범위는 얼마입니까? 긍정적이거나 서명 되었습니까? – Joe

답변

2

하는 부호 시프트 연산자 쉽게 간단한 시프트 비트 마스킹을 사용하여 구현 될 수있다 : 시프트 후에 유지되어야한다 (1)의 모든 비트를 설정함으로써

public static int unsignedShift(int amt, int val) { 
    int mask = (1 << (32 - amt)) - 1; 
    return (val >> amt) & mask; 
} 

마스크 작품 . 이 값은 amt> = 32이고 amt = 0 인 경우 Java에 비해 다른 결과를 반환합니다.

+0

기술을 제안 해 주셔서 감사합니다.하지만이 코드는 Ruby처럼 보이지 않습니다. 부호없는 시프트 연산자를 지원하는 JavaScript와 비슷합니다. –

+0

@Jared 자바입니다.하지만 그 원리를 설명하는 것입니다. 다른 언어로 포팅하는 일은 쉽지 않습니다. – Voo

관련 문제