IT story

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

hot-time 2020. 4. 23. 08:01
반응형

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;
}

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

(a % b + b) % b

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

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


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


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

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

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

if (a % 2 == 0) {
} else {
}

'remainder'연산자 %를 사용하기 전에 사양을 검토해야합니다.

http://java.sun.com/docs/books/jls/third_edition/html/expressions.html#15.17.3

// bad enough implementation of isEven method, for fun. so any worse?
boolean isEven(int num)
{
    num %= 10;
    if(num == 1)
       return false;
    else if(num == 0)
       return true;
    else
       return isEven(num + 2);
}
isEven = isEven(a);

또한 mod는 다음과 같이 사용될 수 있습니다 :

int a = 7;
b = a % 2;

b1과 같을 것 7 % 2 = 1입니다.


Java의 나머지 연산자는 %다음과 같으며 모듈로 연산자는

public int mod(int i, int j)
{
  int rem = i % j;
  if (j < 0 && rem > 0)
  {
    return rem + j;
  }
  if (j > 0 && rem < 0)
  {
    return rem + j;
  }
  return rem;
}

Java에서 %연산자 15.17.3입니다. 나머지 연산자 %

또한이 있습니다 floorMod에서 java.lang.Math와 다른 결과를 줄 것이다 클래스 %다른 징후와 인수를 :

public static int floorMod​(int x, int y)


모듈로 연산자는 % (퍼센트 부호)입니다. 균일 성을 테스트하거나 일반적으로 2의 거듭 제곱에 대해 모듈로를 수행하려면 isEven =! (a & 1)과 같은 & (및 연산자)를 사용할 수도 있습니다.


다른 방법은 다음과 같습니다.

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

그러나 가장 쉬운 방법은 여전히 ​​:

boolean isEven = (a % 2) == 0;

@Steve Kuo와 같이 말했다.


이어 Java상기 모드 동작 등을 수행 할 수있다 :

Math.floorMod(a, b)

참고 : 모드 동작은 다른 나머지 작업. 에서 Java나머지 작업은 같은 수행 할 수 있습니다 :

a % b

다른 사람들이 지적했듯이, %(나머지) 연산자는 수학 mod계수 연산 / 기능 과 동일하지 않습니다 .

mod vs %

x mod n함수 는의 범위에 매핑 x됩니다 . 반면 연산자 는의 범위에 매핑 됩니다 .n[0,n)
x % nxn(-n,n)

수학 계수 연산을 사용하고 앞에 부호를 신경 쓰지 않는 방법을 사용하려면 다음을 사용할 x수 있습니다.

((x % n) + n) % n

어쩌면이 그림은 더 잘 이해하는 데 도움이 될 것입니다 (먼저 머리를 감싸는 데 어려움을 겪었습니다)

여기에 이미지 설명을 입력하십시오


@Cody의 코드 대안 :

모듈러스 연산자 사용 :

bool isEven = (a % 2) == 0;

중복 및 사용되지 않는 유연성이 적기 때문에 if / else를 작성하는 것보다 약간 더 나은 코드라고 생각합니다. 검사하는 데 약간의 두뇌 능력이 필요하지만 좋은 이름은 isEven보상합니다.

참고 URL : https://stackoverflow.com/questions/90238/whats-the-syntax-for-mod-in-java

반응형