2014-04-06 23 views
0

我运行一个循环,我的循环中我有以下几点:Modulus如何使用负整数?

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

我明白如何模量正常或可与正数,但我不明白它是如何工作负整数? 任何人都可以解释给我吗?

非常感谢。

+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

太好了。谢谢Paul – PrimalScientist

+1

@PrimalScientist - 如果“那太棒了”,你应该接受这个答案。这是堆栈溢出的方式。 –

+1

我是。我需要等8分钟。 :) – PrimalScientist

2

a mod b对于正整数ab非常明确。如果ab是负数?有三种选择与该基本定义一致:

  1. a mod b总是正面的。
  2. a mod ba具有相同的符号。
  3. a mod bb具有相同的符号。

不同的语言会选择这三种选择中的一种。没有独特的正确答案。

+0

非常感谢您的反馈David。 :) – PrimalScientist