Programs must not allow mathematical operations to exceed the integer ranges provided by their primitive integer data types. According to the Java Language Specification (JLS), §4§4.2.2, "Integer Operations"
...
The integral types in Java, representation, and inclusive ranges are shown in the following table JLS §4§4.2.1, "Integral Types and Values":
...
Code Block | ||
---|---|---|
| ||
static final int safeAdd(int left, int right) throws ArithmeticException {
if (right > 0 ? left > Integer.MAX_VALUE - right : left < Integer.MIN_VALUE - right) {
throw new ArithmeticException("Integer overflow");
}
return left + right;
}
static final int safeSubtract(int left, int right) throws ArithmeticException {
if (right > 0 ? left < Integer.MIN_VALUE + right : left > Integer.MAX_VALUE + right) {
throw new ArithmeticException("Integer overflow");
}
return left - right;
}
static final int safeMultiply(int left, int right) throws ArithmeticException {
if (right > 0 ? left > Integer.MAX_VALUE/right || left < Integer.MIN_VALUE/right :
(right < -1 ? left > Integer.MIN_VALUE/right || left < Integer.MAX_VALUE/right :
right == -1 && left == Integer.MIN_VALUE) ) {
throw new ArithmeticException("Integer overflow");
}
return left * right;
}
static final int safeDivide(int left, int right) throws ArithmeticException {
if ((left == Integer.MIN_VALUE) && (right == -1)) {
throw new ArithmeticException("Integer overflow");
}
return left / right;
}
static final int safeNegate(int a) throws ArithmeticException {
if (a == Integer.MIN_VALUE) {
throw new ArithmeticException("Integer overflow");
}
return -a;
}
static final int safeAbs(int a) throws ArithmeticException {
if (a == Integer.MIN_VALUE) {
throw new ArithmeticException("Integer overflow");
}
return Math.abs(a);
}
|
...
<ac:structured-macro ac:name="unmigrated-wiki-markup" ac:schema-version="1" ac:macro-id="42204c15c4a98cea-7090369f-4daa4b98-9421aa7b-9fe99dcf04d319ab12b6bb5f"><ac:plain-text-body><![CDATA[ | [[API 2006 | AA. Bibliography#API 06]] | class [ | http://download.oracle.com/javase/6/docs/api/java/util/concurrent/atomic/AtomicInteger.html] | ]]></ac:plain-text-body></ac:structured-macro> |
<ac:structured-macro ac:name="unmigrated-wiki-markup" ac:schema-version="1" ac:macro-id="46283a6bb1145c5f-27bd213b-4c6241f7-905b988e-f27e6dcd7bb9e9ea27f9db1d"><ac:plain-text-body><![CDATA[ | [[Bloch 2005 | AA. Bibliography#Bloch 05]] | Puzzle 27: Shifty i's | ]]></ac:plain-text-body></ac:structured-macro> | |
<ac:structured-macro ac:name="unmigrated-wiki-markup" ac:schema-version="1" ac:macro-id="5571ddf13783b339-1ab5617c-4ed240b4-a5d39eed-3105797b0cc37d2a5750f893"><ac:plain-text-body><![CDATA[ | [[SCG 2009 | AA. Bibliography#SCG 09]] | Introduction | ]]></ac:plain-text-body></ac:structured-macro> | |
<ac:structured-macro ac:name="unmigrated-wiki-markup" ac:schema-version="1" ac:macro-id="ba368c419c4632f9-4db3790a-4f5a4a83-aa7695b1-95fe2923ce25663a1785bd5d"><ac:plain-text-body><![CDATA[ | [[JLS 2005 | AA. Bibliography#JLS 05]] | [§4§4.2.2, "Integer Operations" | http://java.sun.com/docs/books/jls/third_edition/html/typesValues.html#4.2.2] | ]]></ac:plain-text-body></ac:structured-macro> |
| |||||
<ac:structured-macro ac:name="unmigrated-wiki-markup" ac:schema-version="1" ac:macro-id="6fb05da4b0be9c42-712c301c-4f244522-bb279fe8-3aa24d17e69769647a782d06"><ac:plain-text-body><![CDATA[ | [[Seacord 2005 | AA. Bibliography#Seacord 05]] | Chapter 5. Integers | ]]></ac:plain-text-body></ac:structured-macro> | |
<ac:structured-macro ac:name="unmigrated-wiki-markup" ac:schema-version="1" ac:macro-id="71fdac195d262cb7-90762d35-4ca44980-9c49aa97-cb01e719f68465cd28796811"><ac:plain-text-body><![CDATA[ | [[Tutorials 2008 | AA. Bibliography#Tutorials 08]] | Primitive Data Types | ]]></ac:plain-text-body></ac:structured-macro> |
...
03. Numeric Types and Operations (NUM)NUM15-J. Ensure that division and modulo operations do not result in divide-by-zero errors 03. Numeric Types and Operations (NUM) NUM00-J. Do not assume that the remainder operator always returns a non-negative result for integral operands04. Object Orientation (OBJ)