Java의 Mod는 음수를 생성합니다.
계산할 때int i = -1 % 2
나는 이해한다-1
자바어.Python에서는1
의 결과로서-1 % 2
modulo 기능으로 자바에서도 같은 동작을 하려면 어떻게 해야 하나요?
문제는 Python에서는 % 연산자가 계수를 반환하고 Java에서는 나머지를 반환한다는 것입니다.이러한 함수는 양의 인수에 대해 동일한 값을 제공하지만 계수는 항상 음의 입력에 대해 양의 결과를 반환하고 나머지는 음의 결과를 제공할 수 있습니다.이 질문에는 그것에 대한 더 많은 정보가 있습니다.
이렇게 하면 양의 값을 찾을 수 있습니다.
int i = (((-1 % 2) + 2) % 2)
또는 다음과 같습니다.
int i = -1 % 2;
if (i<0) i += 2;
(-1 또는 2는 원하는 분자나 분모가 될 수 있습니다.)
Java 8에서는 Math.floor Mod() 메서드를 사용할 수 있습니다.
Math.floorMod(-1, 2); //== 1
주의: modulo-value(여기서)의 경우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
이에 비해 Pascal 언어는 두 개의 연산자를 제공합니다. 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
'sourcecode' 카테고리의 다른 글
error C2275 : illegal use of this type as an expression (0) | 2022.07.26 |
---|---|
vue.multiple select 오류입니다. (0) | 2022.07.26 |
영숫자가 아닌 모든 문자를 빈 문자열로 바꾸기 (0) | 2022.07.23 |
VueJS 체크박스의 모델 배열 (0) | 2022.07.23 |
속성을 지정합니다.단일 파일 구성 요소 vue js에 $el이 정의되지 않았습니다. (0) | 2022.07.23 |