2013-08-29 3 views
0

Почему я получаю 2 и не -2 в следующем?Использование оператора% в Java

System.out.println(11%-3); 

Учитывая, что:

System.out.println(-11%3); 

возвращается -2 ..

Заранее спасибо.

+1

Поскольку% является ** ** остаток после двух операндов были разделены. –

+0

@OliCharlesworth с 11/-3 и -11/3 возвращает те же результаты, почему я получаю другой результат, используя% – Rollerball

+0

Поскольку r = n - q * d, где n - числитель, d - знаменатель, q - фактор и r - остаток. –

ответ

3

Цитирование JLS:

операция остальное для операндов, которые являются целыми числами после двоичного числового продвижения (§5.6.2) производит результирующее значение такое, что (a/b)*b+(a%b) равно a.


Как следует из этого правила, что результат операции остаточного может быть отрицательным, только если делимое отрицательно, и может быть положительным только если делимое положительно. Более того, величина результата всегда меньше, чем величина делителя.

(выделено мной.)

Кроме того, обратитесь к Modulo operation информации об операторах по модулю на различных языках программирования.

-3

Это математическая проблема.

1-й, -11% 3 и 11% -3 одинаковы.

2-й, если вы хотите положительное число, удалите «минус». попробовать 11% 3 или -11% -3

1

Правила указаны в Jls 15.17.3 Remainder Operator % -

Из этого правила, что результат операции остатка может быть отрицательным, только если делимое отрицательно, и может быть положительным, только если делимое положительны. Более того, величина результата всегда меньше величины дивизора.

0

Во-первых, "остаточный()" означает: , если а = Ь * с + г, а, б, в, г представляют собой целые числа. Затем 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

Смежные вопросы