2016-05-15 5 views
0

Я многое узнал от моего последнего вопроса, надеюсь, я не делаю снова одни и те же ошибки :)Модульное деление против остаток деления Java

Это вытекает из предыдущего вопроса. Вот что я думаю, что знаю:

Для Интс в Java (я предполагаю, что на всех языках, но я прошу в JAVA специально):

1/3 = 0 
1%3 = 1 

Я был озадачен, почему i%j = i когда это i < j и а предыдущий плакат объяснил, как это сработало, и также заявил, что «во-первых, на Java,% - это оператор остатка (немодуля), который имеет немного другую семантику ...»

Их объяснение было идеальным для того, что мне было нужно. Тем не менее, я был смущен их цитатой, потому что меня всегда учили, что в математике модульное == остальное деление.

Как выполнить модульное деление в JAVA и есть ли подводные камни, чтобы смотреть, когда пытаетесь использовать% в качестве оператора модуля?

+1

Возможный дубликат [В чем разница между «модом» и «остатком»?] (Http://stackoverflow.com/questions/13683563/whats-the-difference-between-mod-and-remainder) –

+0

'% 'является оператором арифметического остатка. [Эта тема] (http://stackoverflow.com/questions/2947044/how-do-i-use-modulus-for-float-double) также интересна. –

ответ

0

Вы можете быть смущены «оператором modulo» в арифметике, что совпадает с оператором % на Java и аналогичных языках, я не думаю, что существует такая вещь, как «модульное деление». Оператор % в java всегда будет возвращать целочисленный остаток от повторного деления между двумя числами. Как и в арифметике, (i % j) = i где i < j и i >= 0. Результат операции меньше j.

+0

где 'i < j' and 'i > = 0'.Просто упомянуть, что это неверно для отрицательных чисел. –

+0

@DenisLukenich Спасибо, я внесла поправки. – SamTebbs33

0

математика, modulo - это деление с остатком.

7 mod 4 = 1 R3 

см:

n = a * m + r 

по модулю оператора в Java (как и в большинстве других языков) дает только часть остатка и не я не знаю, если он работает с отрицательными числами правильными.

В деталях, математика по модулю всегда положительна. Это различие с модульным оператором в java.

a mod n = b, if there is a number k existing with a = b + kn 
        and 0 <= b < n 

Это означает, что если вы берете -14 мод 4:

-14 = b + k * 4 //lets take -3 for k 
-14 = b + -3 * 4 
-14 = b - 12 
-2 = b 

, что было бы неправильно (математически) becaouse Ь отрицательна. поэтому мы должны взять -4 для к

-14 = b + -4 * 4 
-14 = b + 16 
    2 = b 

это правильный ответ. В этом случае только знак - это разница, но если вы возьмете -15 mod 4, вы получите -3 в java и большинстве других языков, но математически правильный ответ будет 1 (-15 + 16)

с использованием java , вы получите отрицательные значения.

+0

7 mod 4 - 3, а не 1 – SamTebbs33

+0

Он сделал состояние R3. – sebenalern

+0

modulo - это не только остаток, если вы прочтете мой ответ, я опубликую 7 mod 4 - 1 R3. r3 означает остаток от 3 –

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