# Java Programming/Arithmetic expressions

* Navigate Language Fundamentals topic: ( v • d • e )
* Statements
* Conditional blocks
* Loop blocks
* Boolean expressions
* Variables
* Primitive Types
* Arithmetic expressions
* Literals
* Methods
* String
* Objects
* Packages
* Arrays
* Mathematical functions
* Large numbers
* Random numbers
* Unicode
* Comments
* Keywords
* Coding conventions
* 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:
* Code section 3.59: Variable assignation.
* int x = 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).
* Code listing 3.10: Operators.java
* public class Operators {
* public static void main(String args) {
* int x = 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;
* Console for Code listing 3.10
* 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:
* Question 3.8: Question8.java
* public class Question8 {
* public static void main(String args) {
* int x = 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?
* Output for Question 3.8
* 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:
* Code section 3.60: Several operators.
* System.out.println(10*5 + 100/10 - 5 + 7%2);
* Console for Code section 3.60
* 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):
* Code listing 3.11: Assignments.java
* public class Assignments {
* public static void main(String args) {
* int x = 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);
* Console for Code listing 3.11
* 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

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 |