2015-08-31 3 views
-11

Я не совсем понимаю, как работает модульное деление. Я рассчитывал 5% 6 и получил 5, и я не понимаю, почему. Я понимаю модуль без десятичных значений. E. G 16% 3 = 5 r 1.Понимая модуль

+2

5 = 0x6 + 5, так что осталось 5. – Tunaki

+0

Это ваша проблема 5% 6, разве это не 6% 5? – ryekayo

+2

Это не имеет ничего общего с java. – HyperZ

ответ

1

Проблема с вашими расчетами 5 % 6 заключается в том, что она ВСЕГДА даст вам остаток 5. Если вы пробовали 6 % 5, это даст вам 1 ответ.

1

Это не вопрос программирования, поскольку модуль является математическим оператором, совершенно не уникальным для Java или любого языка программирования, но 5 mod 6 = 5, поскольку он является остатком после деления на 6 (5 < 6) остаток - 5). 6 мод 5 = 1, а 6> 5, так что вы отнимите 5, то вы остаетесь с 1 и 1 < 6.

Если это помогает, вот псевдокод иллюстрация модуля (для положительных целых чисел):

integer mod(integer a, integer b) { 
    if a < b: 
     return a 
    else: 
     return mod(a - b, b) 
} 
0

num1 % num2

оператор модуля делит num1 на num2 как целые числа (другими словами, все результаты деления закруглены вниз до ближайшего целого числа) и выводит остаток. В вашем случае, 5/6 = 0 с остатком 5.

Другим способом выражения остатка: num1 = x*num2 + R

где х является результатом целочисленного деления num1/num2 и R представляет собой остаток, который является выходом оператора модулей. Опять в вашем случае, 5 = 0*6 + 5.

0

Оператор модуля похож на «остаток», но существуют технические особенности, которые делают его другим, когда задействованы отрицательные числа.

Однако, для вашего примера, подумайте о 5% 6 как о «оставшейся части 5, разделенной на 6». Прочитайте слева направо, точно так же, как разделение.