Programing

Java의 Mod가 음수를 생성 함

crosscheck 2020. 6. 22. 07:59
반응형

Java의 Mod가 음수를 생성 함


이 질문에는 이미 답변이 있습니다.

내가 계산할 때 나는 Java를 int i = -1 % 2얻는다 -1. 파이썬에서는 1의 결과로 얻습니다 -1 % 2. 모듈로 함수를 사용하여 Java에서 동일한 동작을 얻으려면 어떻게해야합니까?


여기서 문제는 파이썬에서 % 연산자는 모듈러스를 반환하고 자바에서는 나머지를 반환한다는 것 입니다. 이러한 함수는 양수 인수에 대해 동일한 값을 제공하지만 모듈러스는 항상 음수 입력에 대해 양수 결과를 반환하지만 나머지는 음수 결과를 제공 할 수 있습니다. 이 질문 에 더 많은 정보가 있습니다 .

다음을 수행하여 양수 값을 찾을 수 있습니다.

int i = (((-1 % 2) + 2) % 2)

아니면 이거:

int i = -1 % 2;
if (i<0) i += 2;

(분명히 -1 또는 2는 분자 또는 분모가 될 수있는 모든 것이 될 수 있습니다)


Java 8부터 Math.floorMod () 메소드를 사용할 수 있습니다 .

Math.floorMod(-1, 2); //== 1

참고 : 모듈로 값 (여기서는 2)이 음수이면 모든 출력 값도 음수입니다. :)

출처 : https://stackoverflow.com/a/25830153/2311557


필요한 n % m경우 :

int i = (n < 0) ? (m - (abs(n) % m) ) %m : (n % m);

수학적 설명 :

n = -1 * abs(n)
-> n % m = (-1 * abs(n) ) % m
-> (-1 * (abs(n) % m) ) % m
-> m - (abs(n) % m))

if b > 0:
    int mod = (mod = a % b) < 0 ? a + b : a;

%연산자를 두 번 사용하지 않습니다 .


계수가 2의 거듭 제곱이면 비트 마스크를 사용할 수 있습니다.

int i = -1 & ~-2; // -1 MOD 2 is 1

파스칼 언어는 두 가지 연산자를 제공합니다. REM은 분자의 부호 소요 ( x REM yx - (x DIV y) * yx DIV y이다 TRUNC(x / y)) 및 MOD는 긍정적 인 분모가 필요하며 긍정적 인 결과를 반환합니다.

참고 URL : https://stackoverflow.com/questions/5385024/mod-in-java-produces-negative-numbers

반응형