Arithmetic expressions
- 100% developed as of Dec 31, 2012 Statements
- 100% developed as of Mar 10, 2013 Conditional blocks
- 100% developed as of Mar 10, 2013 Loop blocks
- 100% developed as of May 24, 2013 Boolean expressions
- 100% developed as of Feb 16, 2010 Variables
- 100% developed as of Mar 10, 2013 Primitive Types
- 100% developed as of Mar 10, 2013 Arithmetic expressions
- 100% developed as of May 24, 2013 Literals
- 100% developed as of Mar 10, 2013 Methods
- 100% developed as of May 24, 2013 String
- 100% developed as of Mar 10, 2013 Objects
- 100% developed as of Jul 5, 2012 Packages
- 100% developed as of Mar 10, 2013 Arrays
- 75% developed as of Jan 11, 2013 Mathematical functions
- 75% developed as of Jan 11, 2013 Large numbers
- 75% developed as of Jan 11, 2013 Random numbers
- 100% developed as of Apr 8, 2013 Unicode
- 100% developed as of Apr 8, 2013 Comments
- 100% developed as of Sep 27, 2007 Keywords
- 100% developed as of Aug 6, 2013 Coding conventions
- 0% developed as of Mar 26, 2018 Lambda expressions
In order to do arithmetic in Java, one must first declare at least one variable. Typically one declares a variable and assigns it a value before any arithmetic is done. Here's an example of declaring an integer variable:
intx=5;
After creating a variable, one can manipulate its value by using Java's operators: +
(addition), -
(subtraction), *
(multiplication), /
(integer division), %
(modulo or remainder), ++
(pre- & postincrement by one), --
(pre- & postdecrement by one).
publicclass Operators{ publicstaticvoidmain(String[]args){ intx=5; System.out.println("x = "+x); System.out.println(); System.out.println("--- Addition ---"); x=5; System.out.println("x + 2 = "+(x+2)); System.out.println("x = "+x); System.out.println(); System.out.println("--- Subtraction ---"); x=5; System.out.println("x - 4 = "+(x-4)); System.out.println("x = "+x); System.out.println(); System.out.println("--- Multiplication ---"); x=5; System.out.println("x * 3 = "+(x*3)); System.out.println("x = "+x); System.out.println(); System.out.println("--- (Integer) Division ---"); x=5; System.out.println("x / 2 = "+(x/2)); System.out.println("x = "+x); System.out.println(); System.out.println("--- Modulo (Remainder) ---"); x=5; System.out.println("x % 2 = "+(x%2)); System.out.println("x = "+x); System.out.println(); System.out.println("--- Preincrement by one ---"); x=5; System.out.println("++x = "+(++x)); System.out.println("x = "+x); System.out.println(); System.out.println("--- Predecrement by one ---"); x=5; System.out.println("--x = "+(--x)); System.out.println("x = "+x); System.out.println(); System.out.println("--- Postincrement by one ---"); x=5; System.out.println("x++ = "+(x++)); System.out.println("x = "+x); System.out.println(); System.out.println("--- Postdecrement by one ---"); x=5; System.out.println("x-- = "+(x--)); System.out.println("x = "+x); System.out.println(); } }
x = 5 --- Addition --- x + 2 = 7 x = 5 --- Subtraction --- x - 4 = 1 x = 5 --- Multiplication --- x * 3 = 15 x = 5 --- (Integer) Division --- x / 2 = 2 x = 5 --- Modulo (Remainder) --- x % 2 = 1 x = 5 --- Preincrement by one --- ++x = 6 x = 6 --- Predecrement by one --- --x = 4 x = 4 --- Postincrement by one --- x++ = 5 x = 6 --- Postdecrement by one --- x-- = 5 x = 4
The division operator rounds towards zero: 5/2
is 2, and -5/2
is -2.
The remainder operator has the same sign as the left operand; it is defined such that ((a/b)*b) + (a%b)
is always equal to a.
The preincrement, predecrement, postincrement, and postdecrement operators are special: they also change the value of the variable, by adding or subtracting one. The only difference is that preincrement/decrement returns the new value of the variable; postincrement returns the original value of the variable.
Question 3.8: Consider the following code:
publicclass Question8{ publicstaticvoidmain(String[]args){ intx=10; x=x+10; x=2*x; x=x-19; x=x/3; System.out.println(x); } }
What will be printed in the standard output?
7
int x = 10;
=> 10
x = x + 10;
=> 20
x = 2 * x;
=> 40
x = x - 19;
=> 21
x = x / 3;
=> 7
When using several operators in the same expression, one must consider Java's order of precedence. Java uses the standard PEMDAS (Parenthesis, Exponents, Multiplication and Division, Addition and Subtraction) order. When there are multiple instances of the same precedence, Java reads from left to right. Consider what the output of the following code would be:
System.out.println(10*5+100/10-5+7%2);
56
The following chart shows how Java would compute this expression:
Besides performing mathematical functions, there are also operators to assign numbers to variables (each example again uses the variable initialized as x = 5
):
publicclass Assignments{ publicstaticvoidmain(String[]args){ intx=5; x=3; System.out.println("Assignment (x = 3) : "+x); x=5; x+=5; System.out.println("Assign x plus another integer to itself (x += 5): "+x); x=5; x-=4; System.out.println("Assign x minus another integer to itself (x -= 4): "+x); x=5; x*=6; System.out.println("Assign x multiplied by another integer to itself (x *= 6): "+x); x=5; x/=5; System.out.println("Assign x divided by another integer to itself (x /= 5): "+x); } }
Assignment (x = 3) : 3 Assign x plus another integer to itself (x += 5): 10 Assign x minus another integer to itself (x -= 4): 1 Assign x multiplied by another integer to itself (x *= 6): 30 Assign x divided by another integer to itself (x /= 5): 1
Using bitwise operators within Java
[edit | edit source ]Java has besides arithmetic operators a set of bit operators to manipulate the bits in a number, and a set of logical operators. The bitwise logical operators are
Operator | Function | Value of x before |
Example input |
Example output |
Value of x after |
---|---|---|---|---|---|
&
|
Bitwise AND | 7 | x&27
|
3 | 7 |
|
|
Bitwise OR | 7 | x|27
|
31 | 7 |
^
|
Bitwise XOR | 7 | x^27
|
28 | 7 |
~
|
Bitwise inversion | 7 | ~x
|
-8 | 7 |
Besides these logical bitwise functions, there are also operators to assign numbers to variables (x = -5
):
Operator | Function | Example input |
Example output |
---|---|---|---|
&=
|
Assign x bitwisely ANDed with another value to itself
|
x &= 3
|
3 |
|=
|
Assign x bitwisely ORed with another value to itself
|
x |= 3
|
-5 |
^=
|
Assign x bitwisely XORed with another value to itself
|
x ^= 3
|
-8 |
<<=
|
Assign x divided by another integer to itself
|
x <<= 1
|
-10 |
>>=
|
Assign x bitwisely negated with another value to itself
|
x >>= 1
|
-3 |
>>>=
|
Assign x bitwisely negated with another value to itself
|
x >>>= 1
|
2,305,843,009,213,693,949 (64 bit) |
The shift operators are used to shift the bits to the left or right, which is also a quick way to multiply/divide by two:
Operator | Function | Value of x before |
Example input |
Example output | Value of x after |
---|---|---|---|---|---|
<<
|
Logical shift left | -15 | x << 2
|
-60 | -15 |
>>
|
Arithmetic shift right | -15 | x >> 3
|
-2 | -15 |
>>>
|
Logical shift right | -15 | x >>> 3
|
2,305,843,009,213,693,937 (64 bit) | -15 |