2014-04-06 3 views
0

Я бег для цикла и внутри моего цикла я следующее:Как работает модуль с отрицательными целыми числами?

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)); 
    } 

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

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

+0

[Это математический вопрос?] (Http://en.wikipedia.org/wiki/Modular_arithmetic) –

+0

Что есть с этим вопросом, который JLS не говорит вам? –

+0

Ну, на самом деле, я думаю, это так? Но я задаю этот вопрос, поскольку это касается Java в моем коде. – PrimalScientist

ответ

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

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

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

+0

Thats great. Спасибо Пол – PrimalScientist

+1

@PrimalScientist - Если «это здорово», вы должны принять этот ответ. Это способ переполнения стека. –

+1

Я. Мне нужно подождать 8 минут. :) – PrimalScientist

2

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

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

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

+0

Большое спасибо за ваши отзывы Дэвид. :) – PrimalScientist