2014-09-10 336 views
3

在C和C++中,根據Shafik's postINT_MIN % -1的行爲似乎是未定義/平臺相關的。Java的%運算符是否溢出?

在Java中,%運算符是否溢出?

考慮這段代碼:

public class Test { 
    public static void main(String[] args) { 
     // setup variables: 
     byte b = Byte.MIN_VALUE % (-1); 
     short s = Short.MIN_VALUE % (-1); 
     int i = Integer.MIN_VALUE % (-1); 
     long l = Long.MIN_VALUE % (-1); 

     // my machine prints "0" for all: 
     System.out.println(b); 
     System.out.println(s); 
     System.out.println(i); 
     System.out.println(l); 
    } 
} 

是否有一個獨立於平臺的保證,上述結果是0

+0

Java本質上是平臺獨立的,所以我猜(沒選中)答案是YES – shlomi33 2014-09-10 12:28:38

回答

6

JLS section 15.17.3它說:

在C和C++,其餘的運營商只接受整型操作數, 但在Java編程語言,它也接受浮點操作數 。

對於那些經過二進制 數值提升整數的操作數的餘數運算(§5.6.2)產生的結果值,使得 (A/B)* B +(A%B)是等於一。即使在特殊的 的情況下,該特徵也成立,即被除數是其類型的最大可能的 幅度的負整數,並且除數是-1(餘數爲0)。其 遵循這一規則,其餘操作的結果 只有在股息爲負數時才爲負數,並且如果股息爲正數只能爲正數 ;

+1

我正要發佈這個^^幾乎所有東西都在JLS中,特別是對於這類問題。 – Joffrey 2014-09-10 12:31:21

+0

對不起@Joffrey當我讀到這個問題時,我的屏幕上有這個話題: - $ – 2014-09-10 12:40:09

+0

哈哈這沒問題,這裏的重點是要回答這個問題,不管是誰寫的; – Joffrey 2014-09-10 12:41:14