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 y
인 x - (x DIV y) * y
곳 x DIV y
이다 TRUNC(x / y)
) 및 MOD는 긍정적 인 분모가 필요하며 긍정적 인 결과를 반환합니다.
참고 URL : https://stackoverflow.com/questions/5385024/mod-in-java-produces-negative-numbers
'Programing' 카테고리의 다른 글
Chrome Uncaught Syntax Error : 예기치 않은 토큰 불법 (0) | 2020.06.23 |
---|---|
왜 Objects.requireNonNull ()을 사용해야합니까? (0) | 2020.06.22 |
jQuery AJAX 파일 업로드 PHP (0) | 2020.06.22 |
일반 목록-목록 내에서 항목 이동 (0) | 2020.06.22 |
악성 코드를 정규식에 넣을 수있는 방법이 있습니까? (0) | 2020.06.22 |