Нужна помощь в понимании оператора модуля - PullRequest
1 голос
/ 26 апреля 2020

Я понимаю, что модуль возвращает остаток, и я склонен смотреть на это так: 13% 5 = 3, 5 переходит в 13 два раза, с тремя осталось

, но как получается

1 % 5 = 1
2 % 5 = 2
3 % 5 = 3

5 входит в 1 один раз, с 0 осталось справа?

Просто пытаюсь понять, как я должен смотреть на это, чтобы получить понимание, спасибо

Ответы [ 4 ]

3 голосов
/ 26 апреля 2020

Остаток в 1% 5 относится к тому, что осталось от 1 (не 5) после того, как вы разделите на 5. 5 переходит в 1 ноль раз. Итак - когда вы удаляете 0 кратных 5 из 1, все 1 остается. Таким образом, 1% 5 = 1.

Обратитесь к этому для еще лучшего понимания

2 голосов
/ 26 апреля 2020

Отличный вопрос!

Вот несколько интересных фактов об операторе% (модуль):

  • С помощью оператора остатка можно получить последний ди git любого номера (в зависимости от используемой вами системы счисления); подобно дивиденду% 10, вы получите десятичную систему счисления, последний раз git.

  • В java, он может использоваться с любыми типами данных цифр c (например, байт, short, int, long, float и double).

  • Работает как с положительными, так и с отрицательными числами. А результат отрицательного числа определяется знаком дивиденда; означает, что если дивиденд положительный, результат будет положительным, а если дивиденд отрицательным, результат также будет отрицательным. Как 20% (-3) = 2, но -20% (-3) = -2 (дивиденды -20 отрицательны).

Ответ на ваш вопрос и интересный факт (извлечено по ссылке ниже):

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

    Эта идентичность сохраняется даже в частном случае, когда дивиденд является отрицательным целым числом наибольшей возможной величины для его типа, а делитель равен -1 (остаток равен 0).

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

    Если значение делителя для целочисленного оператора остатка равно 0, то возникает исключение ArithmeticException.

Посмотрите, что java говорит https://docs.oracle.com/javase/specs/jls/se8/html/jls-15.html#jls -15.17.3

  • Чаще всего используется в круговом массиве и в хеш-таблице для ограничения элементов.
2 голосов
/ 26 апреля 2020

Оператор модуля возвращает остаток после деления.

Например,

int i = 13 % 5;

установит для i значение 3.

1 голос
/ 26 апреля 2020

Из евклидова деления мы знаем, что для каждых двух целых чисел a и b (b!=0) существуют уникальные целые числа q и r, такие что a = b * q + r и 0 <= r < |b|.

Теперь %, оператор по модулю , возвращает r. Для ваших примеров:

 1 % 5:  1 = 5 * 0 + 1 => r = 1
 2 % 5:  2 = 5 * 0 + 1 => r = 2
13 % 5: 13 = 5 * 2 + 3 => r = 3 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...