[java] Java에서 mod의 구문은 무엇입니까

의사 코드의 예 :

if ((a mod 2) == 0)
{
    isEven = true;
}
else
{
    isEven = false;
}



답변

음수가 아닌 정수에 대해 의미가 약간 다른 모듈러스 연산자 대신 나머지 연산자를 사용할 수 있습니다 %. 정확한 예를 들면 다음과 같습니다.

if ((a % 2) == 0)
{
    isEven = true;
}
else
{
    isEven = false;
}

이것은 하나의 라이너로 단순화 될 수 있습니다 :

isEven = (a % 2) == 0;


답변

다음은 최소 Java 코드로 의사 코드를 표현한 것입니다.

boolean isEven = a % 2 == 0;

이제 구성 요소로 나누겠습니다. Java의 모듈러스 연산자는 퍼센트 문자 (%)입니다. 따라서 int % int를 사용하면 다른 int를 반환합니다. double equals (==) 연산자는 int 쌍과 같은 값을 비교하는 데 사용되며 부울을 반환합니다. 그런 다음 부울 변수 ‘isEven’에 할당됩니다. 연산자 우선 순위에 따라 모듈러스는 비교 전에 평가됩니다.


답변

다른 모든 사람들이 이미 답을 했으므로 약간의 컨텍스트를 추가하겠습니다. “모듈러스”연산자가 실제로 나머지 작업을 수행하고 있습니다. mod와 rem의 차이점은 미묘하지만 중요합니다.

(-1 mod 2)는 일반적으로 1을 제공합니다.보다 구체적으로 두 개의 정수 X와 Y가 주어지면 연산 (X mod Y)는 [0, Y) 범위의 값을 반환하는 경향이 있습니다. 다르게 말하면, X 및 Y의 모듈러스는 항상 0보다 크거나 같고 Y보다 작다.

“%”또는 rem 연산자를 사용하여 동일한 작업을 수행하면 X 값의 부호가 유지됩니다. X가 음수이면 범위 (-Y, 0)의 결과를 얻습니다 .X가 양수이면 [0, Y) 범위의 결과를 얻습니다.

이 미묘한 차이는 종종 중요하지 않습니다. 그러나 코드 질문으로 돌아가서 “균등성”을 해결하는 방법에는 여러 가지가 있습니다.

첫 번째 방법은 특히 장황하기 때문에 초보자에게 좋습니다.

// Option 1: Clearest way for beginners
boolean isEven;
if ((a % 2) == 0)
{
  isEven = true
}
else
{
  isEven = false
}

두 번째 방법은 언어를 더 잘 활용하고 더 간결한 코드로 이어집니다. (== 연산자는 부울을 반환한다는 것을 잊지 마십시오.)

// Option 2: Clear, succinct, code
boolean isEven = ((a % 2) == 0);

세 번째 방법은 완전성을위한 것이며 삼항 연산자를 사용합니다 . 삼항 연산자는 종종 매우 유용하지만이 경우에는 두 번째 접근 방식이 우수하다고 생각합니다.

// Option 3: Ternary operator
boolean isEven = ((a % 2) == 0) ? true : false;

네 번째이자 마지막 접근 방식은 정수이진 표현에 대한 지식을 사용 하는 것입니다 . 최하위 비트가 0이면 숫자는 짝수입니다. 비트 및 연산자 (&)를 사용하여 확인할 수 있습니다 . 이 방법이 가장 빠르지 만 (분할 대신 간단한 비트 마스킹을 수행하고 있음), 초보자에게는 조금 어려울 수 있습니다.

// Option 4: Bitwise-and
boolean isEven = ((a & 1) == 0);

여기서는 비트 단위 및 연산자를 사용하여 옵션 2에 표시된 간결한 형식으로 표시했습니다. 옵션 1의 형식 (및 옵션 3의 형식)으로 다시 작성하는 것은 독자에게 연습으로 남겨 둡니다. 😉

희망이 도움이됩니다.


답변

음의 X 및 양의 Y 값에 대해 MOD처럼 작동하도록 Java의 % (REM) 연산을 얻으려면이 방법을 사용할 수 있습니다.

private int mod(int x, int y)
{
    int result = x % y;
    if (result < 0)
    {
        result += y;
    }
    return result;
}

또는 삼항 연산자를 사용하는 경우 (일부 상황에서는 짧지 만 가능하지 않거나 덜 효율적 임) :

private int mod(int x, int y)
{
    int result = x % y;
    return result < 0? result + y : result;
}


답변

Java에는 실제로 C와 같은 모듈로 연산자가 없습니다. Java에서 %는 나머지 연산자입니다. 양의 정수에서는 모듈로와 동일하게 작동하지만 음의 정수에서는 다르게 작동하며 모듈로와 달리 부동 소수점 숫자에서도 작동 할 수 있습니다. 여전히 양의 정수 이외의 값에는 %를 사용하는 경우가 드물기 때문에 모듈러스라고 부르려면 자유롭게 느끼십시오!


답변

값이 음수인지 확인하여 적절한 모듈로를 수행하고 값이 많은 경우 수정하는 것이 가능하지만 (많은 방법이 제안한 방법) 더 컴팩트 한 솔루션이 있습니다.

(a % b + b) % b

먼저 모듈러스를 수행하여 값을 -b-> + b 범위로 제한 한 다음 b를 추가하여 값이 양수인지 확인하고 다음 모듈러스가 0-> b 범위로 제한하도록합니다.

참고 : b가 음수이면 결과도 음수입니다.


답변

모듈러스를 사용하지 않고 코드가 훨씬 빠르게 실행됩니다.

public boolean isEven(int a){
    return ( (a & 1) == 0 );
}

public boolean isOdd(int a){
    return ( (a & 1) == 1 );
}