모듈러스를 잘못하고 있습니까? Java -13 % 64
에서는 평가해야 -13
하지만 51
.
답변
음수의 계수에 대한 두 정의가 모두 사용됩니다. 일부 언어는 하나의 정의를 사용하고 일부는 다른 정의를 사용합니다.
음수 입력에 대해 음수를 얻으려면 다음을 사용할 수 있습니다.
int r = x % n;
if (r > 0 && x < 0)
{
r -= n;
}
마찬가지로 음수 입력에서 음수를 반환하는 언어를 사용하고 있고 양수를 선호하는 경우 :
int r = x % n;
if (r < 0)
{
r += n;
}
답변
“수학적으로”둘 다 정확하기 때문에 :
-13 % 64 = -13 (on modulus 64)
-13 % 64 = 51 (on modulus 64)
옵션 중 하나는 Java 언어 개발자가 선택해야했으며 다음을 선택했습니다.
결과의 부호는 배당금의 부호와 같습니다.
Java 사양에서 다음과 같이 말합니다.
https://docs.oracle.com/javase/specs/jls/se7/html/jls-15.html#jls-15.17.3
답변
Java로 작업하고 있습니까? Java는 예상대로 -13 % 64 = -13을 제공하기 때문입니다. 배당금의 징조!
답변
Java에 대한 결과가 잘못되었습니다. 어떻게 도달했는지 (귀하의 프로그램, 구현 및 Java 버전) 컨텍스트를 제공하십시오.
로부터 Java 언어 사양
15.17.3 나머지 연산자 %
[…]
이진 숫자 승격 (§5.6.2) 후 정수인 피연산자에 대한 나머지 연산은 (a / b) * b + (a % b)가 다음과 같은 결과 값을 생성합니다. ㅏ.
15.17.2 나누기 연산자 /
[…]
정수 나누기는 0으로 반올림합니다.
/는 0으로 반올림되므로 (결과는 0)이 경우 %의 결과는 음수 여야합니다.
답변
당신이 사용할 수있는
(x % n) - (x < 0 ? n : 0);
답변
당신의 대답은 위키피디아에 있습니다 :
모듈로 연산
Java에서 모듈로 연산의 사인온은 배당금의 사인온과 동일합니다. 나머지 나누기 연산에 대해 이야기하고 있기 때문에 -13/64 = 0이므로 -13을 반환합니다. -13-0 = -13.
편집 : 죄송합니다, 귀하의 질문을 오해했습니다 … 당신이 맞습니다, 자바는 -13을 제공해야합니다. 더 많은 주변 코드를 제공 할 수 있습니까?
답변
음수 피연산자가있는 모듈로 산술은 언어 설계자에 의해 정의되며, 언어 설계자는이를 언어 구현에 맡기고 정의를 CPU 아키텍처에 연기 할 수 있습니다.
Java 언어 정의를 찾을 수 없습니다. 나머지 연산자 %에
대한 Java 언어 사양 인 Ishtar 는 결과의 부호가 분자의 부호와 동일하다고 말합니다.