Почему я получаю 2 и не -2 в следующем?Использование оператора% в Java
System.out.println(11%-3);
Учитывая, что:
System.out.println(-11%3);
возвращается -2 ..
Заранее спасибо.
Почему я получаю 2 и не -2 в следующем?Использование оператора% в Java
System.out.println(11%-3);
Учитывая, что:
System.out.println(-11%3);
возвращается -2 ..
Заранее спасибо.
Цитирование JLS:
операция остальное для операндов, которые являются целыми числами после двоичного числового продвижения (§5.6.2) производит результирующее значение такое, что
(a/b)*b+(a%b)
равноa
.
Как следует из этого правила, что результат операции остаточного может быть отрицательным, только если делимое отрицательно, и может быть положительным только если делимое положительно. Более того, величина результата всегда меньше, чем величина делителя.
(выделено мной.)
Кроме того, обратитесь к Modulo operation информации об операторах по модулю на различных языках программирования.
Это математическая проблема.
1-й, -11% 3 и 11% -3 одинаковы.
2-й, если вы хотите положительное число, удалите «минус». попробовать 11% 3 или -11% -3
Правила указаны в Jls 15.17.3 Remainder Operator % -
Из этого правила, что результат операции остатка может быть отрицательным, только если делимое отрицательно, и может быть положительным, только если делимое положительны. Более того, величина результата всегда меньше величины дивизора.
Becaue знак результата равен знаку дивиденда. http://docs.oracle.com/javase/specs/jls/se5.0/html/expressions.html#15.17.3
Во-первых, "остаточный()" означает: , если а = Ь * с + г, а, б, в, г представляют собой целые числа. Затем a% b = c
Но, как выбрать c, разные языки программирования имеют различную реализацию.
Для C и Java, остаток рассчитывается как усечение:
-11% 3 = 3 * (- 3) + (- 2) 11% (-3) = (-3) * (- 3) +2
Ключевым моментом является то, почему вы выбираете -3? Потому что:
усеченный (-11/3) = усечение (-3,66) = - 3
"усечение()" получить Int часть близко к 0
В других языках программирования, как Python, использование разделение пола. Это означает, что в Python: -11% 3 = 3 * (этаж (-11/3)) + 2
Пожалуйста, обратитесь к: http://python-history.blogspot.sg/2010/08/why-pythons-integer-division-floors.html
Поскольку% является ** ** остаток после двух операндов были разделены. –
@OliCharlesworth с 11/-3 и -11/3 возвращает те же результаты, почему я получаю другой результат, используя% – Rollerball
Поскольку r = n - q * d, где n - числитель, d - знаменатель, q - фактор и r - остаток. –