я хочу получить отрицательное число из x mod -3 в Java. например: 1 по модулю -3 = -2 или 2 по модулю -3 = -1
Есть ли метод для этой проблемы?
я хочу получить отрицательное число из x mod -3 в Java. например: 1 по модулю -3 = -2 или 2 по модулю -3 = -1
Есть ли метод для этой проблемы?
Оператор %
в Java — это не оператор модуля, а остаток. (это не одно и то же). Это объясняет разные признаки, которые вы получаете. Из текущей Спецификации языка Java, раздел §15.17.3 :
Говорят, что бинарный оператор % дает остаток своих операндов от подразумеваемого деления; левый операнд — делимое, а правый операнд — делитель.
В C и C++ оператор остатка принимает только целые операнды, но в языке программирования Java он также принимает операнды с плавающей запятой.
Остаточная операция для операндов, которые являются целыми числами после двоичного числового расширения (§5.6.2), производит такое значение результата, что (a/b)*b+(a%b) равно a.
Это тождество сохраняется даже в том особом случае, когда делимое является отрицательным целым числом наибольшей возможной величины для своего типа, а делитель равен -1 (остаток равен 0).
Из этого правила следует, что результат операции остатка может быть отрицательным, только если делимое отрицательно, и может быть положительным, только если делимое положительно. При этом величина результата всегда меньше величины делителя.
X mod -Y
, как вы определили, можно вычислить, решив -X mod Y
, а затем отрицая ответ.
Пример: 1 mod -3
-> -1 mod 3 = 2
-> -2
В частности, в Java выполните -X % Y
, затем добавьте Y
, если он не равен нулю, затем отмените ответ.
public static int negativeMod(int x, int y) {
if (y > 0) return x % y;
int newAnswer = (-1 * x) % (-1 * y);
if (newAnswer != 0) newAnswer -= y;
return -1 * newAnswer;
}
negative % positive = negative
- person John Dvorak; 04.11.2012
-1 * n
для отрицания вместо -n
, как обычные люди? :)
- person Wug; 04.11.2012
Это просто. Если остаток не равен 0, вычтите модуль. Например, 1 mod -3, 1 - 3 равно -2, ответ, который вы хотите. Это простое следствие математического тождества a == a - n (mod n).