Как модуль работает с отрицательными целыми числами?

Я запускаю цикл for, и внутри моего цикла у меня есть следующее:

for(int i = 0; i < 12; i = i + 2){
        System.out.println("i = " + i);
        System.out.print("3 - i % 3 (i is at " + i + ") = " + (3 - i % 3));
        System.out.println();
        System.out.println("3 - i (" + (i) + ") = " + (3 - i));
    }

Я понимаю, как модуль работает нормально или с положительными числами, но я не понимаю, как он работает с отрицательными целыми числами? Может ли кто-нибудь объяснить это мне, пожалуйста?

Большое спасибо.


person PrimalScientist    schedule 06.04.2014    source источник
comment
Это математический вопрос?   -  person Sotirios Delimanolis    schedule 06.04.2014
comment
Что там с этим вопросом, который JLS не говорит вам?   -  person Rohit Jain    schedule 06.04.2014
comment
Ну, на самом деле я думаю, что это так? Но я задаю этот вопрос, поскольку он относится к Java в моем коде.   -  person PrimalScientist    schedule 06.04.2014
comment
@SotiriosDelimanolis, нет, потому что это зависит от языка программирования. Например, -10 % 6 в Java отличается от Python.   -  person Paul Draper    schedule 06.04.2014


Ответы (2)


 4 %  3 ==  1
-4 %  3 == -1
 4 % -3 ==  1
-4 % -3 == -1

Изменение знака первого числа меняет знак результата. Знак второго числа значения не имеет.

Это верно для многих языков (C, C++, Java, Javascript), но не для всех языков (Python, Ruby).

person Paul Draper    schedule 06.04.2014
comment
Замечательно. Спасибо, Пол. - person PrimalScientist; 06.04.2014
comment
@PrimalScientist - Если это здорово, вы должны принять этот ответ. Это способ переполнения стека. - person David Hammen; 06.04.2014
comment
Я. Мне нужно подождать 8 минут. :) - person PrimalScientist; 06.04.2014

a mod b очень хорошо определен для положительных целых чисел a и b. Что, если a или b отрицательны? Есть три варианта, которые согласуются с этим базовым определением:

  1. a mod b всегда положительный.
  2. a mod b имеет тот же знак, что и a.
  3. a mod b имеет тот же знак, что и b.

Различные языки выберут один из этих трех вариантов. Нет единого правильного ответа.

person David Hammen    schedule 06.04.2014