Top Banner
Integer numerical data types
75

Integer numerical data types. The integer data types (multiple !) The integer data types use the binary number system as encoding method There are a number.

Jan 17, 2016

Download

Documents

June Craig
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Integer numerical data types. The integer data types (multiple !) The integer data types use the binary number system as encoding method There are a number.

Integer numerical data types

Page 2: Integer numerical data types. The integer data types (multiple !) The integer data types use the binary number system as encoding method There are a number.

The integer data types (multiple !)

• The integer data types use the binary number system as encoding method

• There are a number of different integer types in Java

• The difference between the various integer types is in the size

I.e., the number of bytes used in the encoding

Page 3: Integer numerical data types. The integer data types (multiple !) The integer data types use the binary number system as encoding method There are a number.

The integer data types (multiple !) (cont.)

• Warning:

• Java considers an integer data type of different sizes as different data types !!!

(We saw this also when we discussed the float and double)

Page 4: Integer numerical data types. The integer data types (multiple !) The integer data types use the binary number system as encoding method There are a number.

The integer data types (multiple !) (cont.)

• The integer data types have very similar properties and operations as the floating point data types (float and double

• I will only highlight the differences

• I will be brief on properties and operations that are similar

Page 5: Integer numerical data types. The integer data types (multiple !) The integer data types use the binary number system as encoding method There are a number.

The various integer types in Java

• Integer types in Java:

 Type name (keyword) 

 Number of bytes   Range of values 

byte 1 −128 . . . 127

short 2 −32768 . . . 32767 

int 4 −2,147,483,648 . . . 2,147,483,647 

long 8   −9,223,372,036,854,775,808 . . . 9,223,372,036,854,775,807 

Page 6: Integer numerical data types. The integer data types (multiple !) The integer data types use the binary number system as encoding method There are a number.

The various integer types in Java (cont.)

• Note:

• There is a strict hierarchy among the integer types:

• The byte type is the least accurate integer type

• The short type is the more accurate than the byte type

• The int type is the more accurate than the short type (and the byte type)

• The long type is the more accurate than the int type (and short and byte)

Page 7: Integer numerical data types. The integer data types (multiple !) The integer data types use the binary number system as encoding method There are a number.

The various integer types in Java (cont.)

• Safe conversions:

• Unsafe conversions:

byte ⇒ short ⇒ int ⇒ long

long ⇒ int ⇒ short ⇒ byte

Page 8: Integer numerical data types. The integer data types (multiple !) The integer data types use the binary number system as encoding method There are a number.

The various integer types in Java (cont.)

• Remember that in an arithmetic expression involving different types of values, Java will automatically convert a lower accuracy typed value to the higher accuracy type

In other words:

auto convert to byte value + short value -----------------> short value + short value byte value + int value -----------------> int value + int value ... short value + int value -----------------> int value + int value

Page 9: Integer numerical data types. The integer data types (multiple !) The integer data types use the binary number system as encoding method There are a number.

Behind the scene of a safe and an unsafe conversions

• Example of a safe conversion:

public class Safe { public static void main(String[] args) { int x; short y; y = 1; x = y; // Safe conversion System.out.println(x); } }

Page 10: Integer numerical data types. The integer data types (multiple !) The integer data types use the binary number system as encoding method There are a number.

Behind the scene of a safe and an unsafe conversions (cont.)

• What happens inside the computer (behind the scene):

• The variable y is of the type short and has 16 bits

It is assigned the value 1:

(The bit pattern 00000000 00000001 encodes the number 1 in using 16 bits)

Page 11: Integer numerical data types. The integer data types (multiple !) The integer data types use the binary number system as encoding method There are a number.

Behind the scene of a safe and an unsafe conversions (cont.)

•The statement x = y; will achieve the following:

• This statement copies the value from a short typed variable into an more accurate (wider) int typed variable.

• You cannot loose accuracy !!!

Page 12: Integer numerical data types. The integer data types (multiple !) The integer data types use the binary number system as encoding method There are a number.

Behind the scene of a safe and an unsafe conversions (cont.)

• Example of an unsafe conversion:

public class UnSafe { public static void main(String[] args) { int x; // x uses 4 bytes short y; // y uses 2 bytes x = 65538; // 65538 = 2^16 + 2 // Binary: 00000000 00000001 00000000 00000010 y = (short) x; // Unsafe conversion // y = 00000000 00000010 (lower half of x) // (Correct only for numbers < 65535) System.out.println(y); //***** Prints 2 !!! // Because 00000000 00000010 is equal to 2 } }

Page 13: Integer numerical data types. The integer data types (multiple !) The integer data types use the binary number system as encoding method There are a number.

Behind the scene of a safe and an unsafe conversions (cont.)

• What happens inside the computer (behind the scene):

• The variable x is of the type int and has 32 bits It is assigned the value 65538:

(The bit pattern 00000000 00000001 00000000 00000010 encodes the number 65538 in using 32 bits)

Page 14: Integer numerical data types. The integer data types (multiple !) The integer data types use the binary number system as encoding method There are a number.

Behind the scene of a safe and an unsafe conversions (cont.)

• The statement y = (short) x; will achieve the following:

Page 15: Integer numerical data types. The integer data types (multiple !) The integer data types use the binary number system as encoding method There are a number.

Behind the scene of a safe and an unsafe conversions (cont.)

This statement copies the last 16 bits from a int typed variable into an less accurate (narrower) 16 bits short typed variable.

• You have lost the upper 16 bits bits from the int type variable !!!

• The conversion will result in incorrect value for large values (values > 65535)

Page 16: Integer numerical data types. The integer data types (multiple !) The integer data types use the binary number system as encoding method There are a number.

Behind the scene of a safe and an unsafe conversions (cont.)

• Example Program: (Demo above code) – Prog file:

http://mathcs.emory.edu/~cheung/Courses/170/Syllabus/04/Progs/UnSafe.java

• How to run the program:            

• Right click on link and save in a scratch directory

• To compile:   javac UnSafe.java

• To run:          java UnSafe

Page 17: Integer numerical data types. The integer data types (multiple !) The integer data types use the binary number system as encoding method There are a number.

Reading integer input from the keyboard

• The steps to read in an integer value from the keyboard is the same as those described for floating point values

• The only differences are:

• You need to define an int typed variable to receive the input (because we are reading in an integer number)

• You need to use the nextInt() method which will read in an integer value

Page 18: Integer numerical data types. The integer data types (multiple !) The integer data types use the binary number system as encoding method There are a number.

Reading integer input from the keyboard (cont.)

• Summary of the steps to read in an integer value:

We will look at an example a little bit later.

Page 19: Integer numerical data types. The integer data types (multiple !) The integer data types use the binary number system as encoding method There are a number.

Integer operators

• Integer operators are arithmetic operators that manipulate (operate on) integer values

• A integer operator only operates on integer values

• The result of an integer operator is always an integer value (And the result of an floating point operator is always a floating point value)

• Specifically: An integer operator cannot operate on floating point values (Nor can a floating point operator operate on integer values)

Page 20: Integer numerical data types. The integer data types (multiple !) The integer data types use the binary number system as encoding method There are a number.

Integer operators (cont.)

• Most of the integer (arithmetic) operators should look familiar to you...

• (Except for the % operator)

Page 21: Integer numerical data types. The integer data types (multiple !) The integer data types use the binary number system as encoding method There are a number.

Integer operators (cont.)

• Integer arithmetic operators:

  Operator symbol   Operation Note  

+ addition Binary operator, e.g.: 9 + 4 = 13

− subtraction Binary operator, e.g.: 9 − 4 = 5

* multiplication  Binary operator, e.g.: 9 * 4 = 36

/   division (= quotient) Binary operator, e.g.: 9 / 4 = 2

% modulus (= remainder) Binary operator, e.g.: 9 % 4 = 1

( ... ) brackets Changes order of computation

− negation Changes the sign of the value: − 4 = (−4)

 (Read as: − 4 = negative 4)

Page 22: Integer numerical data types. The integer data types (multiple !) The integer data types use the binary number system as encoding method There are a number.

Quotient and remainder

• From elementary school:

Page 23: Integer numerical data types. The integer data types (multiple !) The integer data types use the binary number system as encoding method There are a number.

Quotient and remainder (cont.)

• The / operator (quotient) will always produce an integer result

It does so by truncating the floating point division

• Examples:

9 / 4 = (floating point result = 2.25) = 2 -9 / 4 = (floating point result = -2.25) = -2 9 / -4 = (floating point result = -2.25) = -2 -9 / -4 = (floating point result = 2.25) = 2

Page 24: Integer numerical data types. The integer data types (multiple !) The integer data types use the binary number system as encoding method There are a number.

Quotient and remainder (cont.)

• The % operator (remainder) will also produce an integer result The sign of the result is always equal to the sign of the dividend

• Examples:

9 % 4 = (floating point result = 2.25) = 1 -9 % 4 = (floating point result = -2.25) = -1 9 % -4 = (floating point result = -2.25) = 1 -9 % -4 = (floating point result = 2.25) = -1

Page 25: Integer numerical data types. The integer data types (multiple !) The integer data types use the binary number system as encoding method There are a number.

Quotient and remainder (cont.)

• Property of integer division:

Example:

dividend = quotient × divisor + remainder

9 / 4 = 2 9 % 4 = 1 9 = 2 * 4 + 1 -9 / 4 = -2 -9 % 4 = -1 -9 = (-2)* 4 + (-1) 9 / -4 = -2 9 % -4 = 1 9 = (-2)*(-4) + 1 -9 / -4 = 2 -9 % -4 = -1 -9 = 2 *(-4) + (-1)

Page 26: Integer numerical data types. The integer data types (multiple !) The integer data types use the binary number system as encoding method There are a number.

How to tell if "+", "-", "*" and "/" is a floating point or an integer operation

• You must have noticed that the "+", "-", "*" and "/" can represent:

• a floating point operation,     or    

• an integer operation

Page 27: Integer numerical data types. The integer data types (multiple !) The integer data types use the binary number system as encoding method There are a number.

How to tell if "+", "-", "*" and "/" is a floating point or an integer operation (cont.)

• Special emphasis:

• The Java compiler (and you also) can tell the difference between integer division and floating point division by the operands used.

Example 1:

9 / 5 (Operands are 2 integers => / is integer division)

9.0 / 5.0 (Operands are 2 floating point numbers => / floating point division)

Page 28: Integer numerical data types. The integer data types (multiple !) The integer data types use the binary number system as encoding method There are a number.

How to tell if "+", "-", "*" and "/" is a floating point or an integer operation (cont.)

Example 2:

int a, b; double x, y;

a / b (Operands are 2 integers ⇒ / is integer division)

x / y (Operands are 2 floating point numbers ⇒ / floating point division)

Page 29: Integer numerical data types. The integer data types (multiple !) The integer data types use the binary number system as encoding method There are a number.

How to tell if "+", "-", "*" and "/" is a floating point or an integer operation (cont.)

The computer does not have any instructions that operates on operands of different types.

Example: this operations cannot be performed directly:

One of the operands must be converted into the other type before the operation can be performed.

We focus on integer-only operations in this webnote.

We will delay this discussion of mixed types operations for the next webnote.

9 / 5.0 (2 types of operands: integer and floating point)

Page 30: Integer numerical data types. The integer data types (multiple !) The integer data types use the binary number system as encoding method There are a number.

Priority and associativity of the integer arithmetic operators

• Each arithmetic operator in Java has a priority and an associativity

• Operator priority was discussed in:

http://mathcs.emory.edu/~cheung/Courses/170/Syllabus/04/float-expr.html#priority

• Operator associativity was discussed in:

http://mathcs.emory.edu/~cheung/Courses/170/Syllabus/04/float-expr.html#associativity

Page 31: Integer numerical data types. The integer data types (multiple !) The integer data types use the binary number system as encoding method There are a number.

Priority and associativity of the integer arithmetic operators (cont.)

• Priority of the integer arithmetic operators:

Operator   Priority Note

(   ....   ) Highest

− (negation) Higher   Unary operator, e.g.: −3

*   /   % High   Binary operator, e.g.: 4 * 5

+   − Lowest   Binary operator, e.g.: 4 + 5

Page 32: Integer numerical data types. The integer data types (multiple !) The integer data types use the binary number system as encoding method There are a number.

Priority and associativity of the integer arithmetic operators (cont.)

• Example 1:

(This is how you compute the sum of the digits in the number 72 !!!)

Integer expression: 72 / 10 + 72 % 10

Evaluated as follows: 72 / 10 + 72 % 10 = 7 + 72 % 10 = 7 + 2

= 9

Page 33: Integer numerical data types. The integer data types (multiple !) The integer data types use the binary number system as encoding method There are a number.

Priority and associativity of the integer arithmetic operators (cont.)

• Example 2: using the negation operator

Integer expression: 22 - - 3 * - 4 + - - 1

Evaluated as follows: 22 - - 3 * - 4 + - - 1 = 22 - (-3) * - 4 + - - 1 = 22 - (-3) * (-4) + - - 1 = 22 - (-3) * (-4) + - (-1) = 22 - (-3) * (-4) + (+1) = 22 - 12 + 1

(Use associativity rule) = 10 + 1 = 11

Page 34: Integer numerical data types. The integer data types (multiple !) The integer data types use the binary number system as encoding method There are a number.

Priority and associativity of the integer arithmetic operators (cont.)

• Example 3: using brackets

Integer expression: (22 - - 3) * - (4 + - - 1)

Evaluated as follows: (22 - - 3) * - (4 + - - 1) = (22 - (-3)) * - (4 + - - 1) = (22 - (-3)) * - (4 + - (-1)) = (22 - (-3)) * - (4 + 1) = 25 * - (4 + 1) = 25 * - 5 = 25 * (-5) = -125

Page 35: Integer numerical data types. The integer data types (multiple !) The integer data types use the binary number system as encoding method There are a number.

Priority and associativity of the integer arithmetic operators (cont.)

• Example Program: (Demo above code)    – Prog file:

http://mathcs.emory.edu/~cheung/Courses/170/Syllabus/04/Progs/Priority02.java

• How to run the program:      

• Right click on link and save in a scratch directory

• To compile:   javac Priority02.java

• To run:          java Priority02

Page 36: Integer numerical data types. The integer data types (multiple !) The integer data types use the binary number system as encoding method There are a number.

Example using integers: convert seconds to (hours, minutes, seconds)

• Problem description:

• Given n seconds

Example:

• Compute the number of hours, number of minutes and number of seconds in n seconds

n = 15432 seconds

15432 = 4*(60*60) + 17*(60) + 12 = 4 hours + 17 minutes + 12 seconds

Page 37: Integer numerical data types. The integer data types (multiple !) The integer data types use the binary number system as encoding method There are a number.

Example using integers: convert seconds to (hours, minutes, seconds) (cont.)

• Advice on developing algorithms:

• Use a concrete example to discover the steps that need to be performed to solve the problem.

• Determine the steps that you must do to complete the task (solve the problem)

• Write down the steps in "psuedo code" (see below)

• Verify that the algorithm in pseudo code is correct.

• After you have Verify that the algorithm in pseudo code is correct,

• You can verify an algorithm by running the algorithm by hand with a small example

Page 38: Integer numerical data types. The integer data types (multiple !) The integer data types use the binary number system as encoding method There are a number.

Example using integers: convert seconds to (hours, minutes, seconds) (cont.)

• Pseudo code:

• Pseudo code is a compact and informal high-level description of an algorithm

• Pseudo code uses the structural conventions of a programming language, but is intended for human reading (rather than machine reading).

• Pseudo code omits details that are not essential for human understanding of the algorithm, such as variable declarations In other words:

• Pseudo code are commands that are easy for humans to follow (no complex descriptions)

• Pseudo code are not Java statements !!

Page 39: Integer numerical data types. The integer data types (multiple !) The integer data types use the binary number system as encoding method There are a number.

Example using integers: convert seconds to (hours, minutes, seconds) (cont.)

• Pseudo code is made up by yourself There is no "standard pseudo code"

• Requirement for pseudo code:

• An algorithm in pseudo code must be easily translated into any programming language

Page 40: Integer numerical data types. The integer data types (multiple !) The integer data types use the binary number system as encoding method There are a number.

Example using integers: convert seconds to (hours, minutes, seconds) (cont.)

• Purpose: rapid prototyping algorithms

• An algorithm written in pseudo code is very easy to change

• You can correct errors easily in an algorithm written in pseudo code

(Trust me, correcting errors in a large computer program is a pain - talk to someone in Microsoft....)

Page 41: Integer numerical data types. The integer data types (multiple !) The integer data types use the binary number system as encoding method There are a number.

Example using integers: convert seconds to (hours, minutes, seconds) (cont.)

• Use a concrete example to determine the steps used to find (hours, minutes, seconds):

Let n = 15432 seconds

1. We can find the # seconds as follows:

257 ------------- 60 / 15432 15420 -------- 12

So: 15432 seconds = 257 minutes + 12 seconds

Or: 15432 seconds = 15432/60 minutes + 15432/60 seconds

2. Next we convert the remaining 257 minutes into hours:

4 -------- 60 / 257 240 ---- 17

Therefore: 257 minutes = 257/60 hours + 257%60 minutes

Page 42: Integer numerical data types. The integer data types (multiple !) The integer data types use the binary number system as encoding method There are a number.

Example using integers: convert seconds to (hours, minutes, seconds) (cont.)

• Pseudo code:

input n; // n = total number of seconds

seconds = n % 60; // computes seconds

n = n / 60; // n is now = remaining minutes minutes = n % 60; // computes minutes

n = n / 60; // n is now = remaining hours

hours = n;

Page 43: Integer numerical data types. The integer data types (multiple !) The integer data types use the binary number system as encoding method There are a number.

Example using integers: convert seconds to (hours, minutes, seconds) (cont.)

• Verify the algorithm (in pseudo code): (use a small example, e.g. n = 15432)

n = 15432;

hours = 15432 / 3600 = 4

r = 15432 % 3600 = 1032 minutes = 1032 / 60 = 17

seconds = 1032 % 60 = 12

Page 44: Integer numerical data types. The integer data types (multiple !) The integer data types use the binary number system as encoding method There are a number.

Example using integers: convert seconds to (hours, minutes, seconds) (cont.)

• Write the algorithm in Java (translate from pseudo code): import java.util.Scanner; public class Hours { public static void main(String[] args) { int n, r, hours, minutes, seconds; Scanner in = new Scanner(System.in); System.out.print("Enter # seconds: "); n = in.nextInt(); // in.nextInt() reads in an integer value

seconds = n % 60; // computes seconds n = n / 60; // n is now = remaining minutes minutes = n % 60; // computes minutes n = n / 60; // n is now = remaining hours hours = n;

Page 45: Integer numerical data types. The integer data types (multiple !) The integer data types use the binary number system as encoding method There are a number.

Example using integers: convert seconds to (hours, minutes, seconds) (cont.)

System.out.print(n); System.out.print(" seconds = "); System.out.print(hours); System.out.print(" hours + "); System.out.print(minutes); System.out.print(" minutes+ "); System.out.print(seconds); System.out.println(" seconds."); } }

Page 46: Integer numerical data types. The integer data types (multiple !) The integer data types use the binary number system as encoding method There are a number.

Example using integers: convert seconds to (hours, minutes, seconds) (cont.)

• Example Program: (Demo above code)     – Prog file:

http://mathcs.emory.edu/~cheung/Courses/170/Syllabus/04/Progs/Hours.java   

• How to run the program:        

• Right click on link and save in a scratch directory

• To compile:   javac Hours.java

• To run:          java Hours

Page 47: Integer numerical data types. The integer data types (multiple !) The integer data types use the binary number system as encoding method There are a number.

Programming example: tell the time of the day

• Preliminary:

• The method System.currentTimeMillis() will return the following value:

• System.currentTimeMillis() returns the number of milli seconds (1/1000 second) since midnight, Jan 1 1970 in GMT

Page 48: Integer numerical data types. The integer data types (multiple !) The integer data types use the binary number system as encoding method There are a number.

Programming example: tell the time of the day (cont.)

• Problem description:

• Find the current time HH:MM:SS GMT

Page 49: Integer numerical data types. The integer data types (multiple !) The integer data types use the binary number system as encoding method There are a number.

Programming example: tell the time of the day (cont.)

• Use a concrete example to determine the steps used to find (hours, minutes, seconds):

Let n = 100000000 millisec

1. Find total number of seconds since midnight, Jan 1 1970:

n = n / 1000 = 100000000 / 1000 = 100000 (total # seconds)

2. Find seconds in current time:

seconds = n % 60 = 100000000 % 1000 = 40 *** part of answer

n = n / 60 = 100000 / 60 = 1666 (total # minutes)

3. Find minutes in current time:

minutes = n % 60 = 1666 / 60 = 46 *** part of answer

n = n / 60 = 1666 % 60 = 27 (total # hours)

3. Find hours in current time:

hours = n % 27 = 27 % 24 = 3 *** part of answer

Page 50: Integer numerical data types. The integer data types (multiple !) The integer data types use the binary number system as encoding method There are a number.

Programming example: tell the time of the day (cont.)

• Algorithm in pseudo code:

n = System.currentTimeMillis(); // n = total # milli sec

n = n / 1000; // n is now = total # sec

seconds = n % 60; // Compute seconds in current time

n = n / 60; // n is now = total # minutes

minutes = n % 60; // Compute minutes in current time

n = n / 60; // n is now = total # hours

hours = n % 60; // Compute hours in current time

Page 51: Integer numerical data types. The integer data types (multiple !) The integer data types use the binary number system as encoding method There are a number.

Programming example: tell the time of the day (cont.)

• Java program:

public class ShowCurrentTime { public static void main(String[] args) { long nMillis; // We need long for accuracy !!! long n, hours, minutes, seconds; nMillis = System.currentTimeMillis(); n = nMillis/1000; // Total # Second; seconds = n % 60; // Seconds n = n / 60; // Total # minutes; minutes = n % 60; // Minutes n = n / 60; // Total # hours; hours = n % 24; // Hours

Page 52: Integer numerical data types. The integer data types (multiple !) The integer data types use the binary number system as encoding method There are a number.

Programming example: tell the time of the day (cont.)

System.out.print(hours); System.out.print(":"); System.out.print(minutes); System.out.print(":"); System.out.print(seconds); System.out.println(" GMT"); } }

Page 53: Integer numerical data types. The integer data types (multiple !) The integer data types use the binary number system as encoding method There are a number.

Programming example: tell the time of the day (cont.)

• Example Program: (Demo above code)     – Prog file:

http://mathcs.emory.edu/~cheung/Courses/170/Syllabus/04/Progs/ShowCurrentTime.java   

• How to run the program:        

• Right click on link and save in a scratch directory

• To compile:   javac ShowCurrentTime.java

• To run:          java ShowCurrentTime

Page 54: Integer numerical data types. The integer data types (multiple !) The integer data types use the binary number system as encoding method There are a number.

Automatic conversion to int in arithmetic operations

• It is extremely inconvenient for programmers to have to write conversion operations when values of different integer types are used in the same arithmetic expression

• Java makes writing programs less painful by providing a number of automatic integer conversions

Page 55: Integer numerical data types. The integer data types (multiple !) The integer data types use the binary number system as encoding method There are a number.

Automatic conversion to int in arithmetic operations (cont.)

• Java's automatic integer conversion in arithmetic operations:

• Arithmetic operations on integer types:

• All values are converted to int type before an arithmetic operation (+, −, *, /, %) in performed.

• However, if one of the values in an arithmetic operation is long, then all values are converted to long type before the arithmetic operation in performed.

Page 56: Integer numerical data types. The integer data types (multiple !) The integer data types use the binary number system as encoding method There are a number.

Automatic conversion to int in arithmetic operations (cont.)

• Example 1:

short a = 2; int b = 3, c;

c = a + b; // a (short) is first converted to an int value // Then the addition is performed.

Page 57: Integer numerical data types. The integer data types (multiple !) The integer data types use the binary number system as encoding method There are a number.

Automatic conversion to int in arithmetic operations (cont.)

• Example 2:

short a = 2, b = 2; int c;

c = a + b; // a and b (short) is first converted to an int value // Then the addition is performed.

Page 58: Integer numerical data types. The integer data types (multiple !) The integer data types use the binary number system as encoding method There are a number.

Automatic conversion to int in arithmetic operations (cont.)

• Example 3:

int a = 2; long b = 3, c;

c = a + b; // a (int) is first converted to an long value // Then the addition is performed.

Page 59: Integer numerical data types. The integer data types (multiple !) The integer data types use the binary number system as encoding method There are a number.

Quiz: can you spot what is wrong with this program

• Java program with an error:

Can you see why the statement c = a + b will cause a compilation error ?

public class Caveat2 { public static void main(String[] args) { short a, b, c; a = 2; b = 3; c = a + b; // Compilation error ! } }

Page 60: Integer numerical data types. The integer data types (multiple !) The integer data types use the binary number system as encoding method There are a number.

Quiz: can you spot what is wrong with this program (cont.)

• Answer:

• Because all value are first converted to int, the RHS a + b will produce a result that is of the type int

• The receiving variable c has the type short

• A int typed value cannot be assigned to a short typed variable We must use a casting operator:

c = (short) (a + b);

Page 61: Integer numerical data types. The integer data types (multiple !) The integer data types use the binary number system as encoding method There are a number.

Quiz: can you spot what is wrong with this program (cont.)

• Note:

• This solution will not work:

because the casting operator (short) has a higher priority than the + operation

c = (short) a + b;

Page 62: Integer numerical data types. The integer data types (multiple !) The integer data types use the binary number system as encoding method There are a number.

Automatic type conversion in the assignment operation

• The automatic safe conversion rule of the assignment operator = is also applicable to integer types

• Recall the safe integer conversions are:

byte ⇒ short ⇒ int ⇒ long

Page 63: Integer numerical data types. The integer data types (multiple !) The integer data types use the binary number system as encoding method There are a number.

Automatic type conversion in the assignment operation (cont.)

• These assignments are allowed: (because they are safe):

long a; int b; short c; byte d;

/* --------------------------------- Automatic conversion happens in all the following assignments --------------------------------- */ a = b; a = c; a = d;

b = c; b = d;

c = d;

Page 64: Integer numerical data types. The integer data types (multiple !) The integer data types use the binary number system as encoding method There are a number.

Automatic type conversion in the assignment operation (cont.)

• You need casting operators to perform the following (unsafe) assignments:

long a; int b; short c; byte d;

/* ----------------------------------- Unsafe assignment requires casting ------------------------------------ */ b = (int) a;

c = (short) a; c = (short) b;

d = (byte) a; d = (byte) b; d = (byte) c;

Page 65: Integer numerical data types. The integer data types (multiple !) The integer data types use the binary number system as encoding method There are a number.

Exercise

• What is the output of the following program public class Exercise1 { public static void main(String[] args) { int a = 15; int b = 24; System.out.println(b - a + 7); System.out.println(b - a - 4); System.out.println(b % a / 2); System.out.println(b % (a / 2)); System.out.println(b * a / 2); System.out.println(b * (a / 2)); System.out.println(b / 2 * a); System.out.println(b / (2 * a)); } }

Page 66: Integer numerical data types. The integer data types (multiple !) The integer data types use the binary number system as encoding method There are a number.

Exercise (cont.)

• Answers:

16 5 4 3 180 168 180 0

Page 67: Integer numerical data types. The integer data types (multiple !) The integer data types use the binary number system as encoding method There are a number.

Exercise (cont.)

• Example Program: (Demo above code)     – Prog file:

http://mathcs.emory.edu/~cheung/Courses/170/Syllabus/04/Progs/Exercise1.java

• How to run the program:        

• Right click on link and save in a scratch directory

• To compile:   javac Exercise1.java

• To run:          java Exercise1

Page 68: Integer numerical data types. The integer data types (multiple !) The integer data types use the binary number system as encoding method There are a number.

Programming trick: divisibility of numbers

• Fact:

• If a number x is divisible by the number d, then the remainder of the division of x by d is equal to zero

Page 69: Integer numerical data types. The integer data types (multiple !) The integer data types use the binary number system as encoding method There are a number.

Programming trick: divisibility of numbers

• Examples:

Later in the course, we will use this property to find all divisors of a number.

12 is divisible by 2 12 % 2 = 0 12 is divisible by 3 12 % 3 = 0 12 is divisible by 4 12 % 4 = 0 12 is not divisible by 5 12 % 5 = 2 12 is divisible by 6 12 % 6 = 0 12 is not divisible by 7 12 % 7 = 5

Page 70: Integer numerical data types. The integer data types (multiple !) The integer data types use the binary number system as encoding method There are a number.

Overflow

• Range of the integer types in Java:

 Type name (keyword) 

 Number of bytes   Range of values 

byte 1 −128 . . . 127

short 2 −32768 . . . 32767 

int 4 −2,147,483,648 . . . 2,147,483,647 

long 8   −9,223,372,036,854,775,808 . . . 9,223,372,036,854,775,807 

Page 71: Integer numerical data types. The integer data types (multiple !) The integer data types use the binary number system as encoding method There are a number.

Overflow (cont.)

• When an operation results in a value that is outside the range of a variable, then there is an overflow error

Page 72: Integer numerical data types. The integer data types (multiple !) The integer data types use the binary number system as encoding method There are a number.

Overflow (cont.)

• Example: public class Overflow { public static void main(String[] args) { int x, y, z; long a, b, c; x = 1000000; y = 3000; z = x * y; // 3,000,000,000 is outside the range of int System.out.println(z); a = 1000000; b = 3000; c = a * b; // 3,000,000,000 is within the range of long System.out.println(c); } }

Page 73: Integer numerical data types. The integer data types (multiple !) The integer data types use the binary number system as encoding method There are a number.

Overflow (cont.)

• Output:

• Explanation:

-1294967296 (not 3000000000 !!!) 3000000000

• You need more than 32 bits to represent the value 3,000,000,000 in the binary number system

• We do not have sufficient number of bits in an int variable to represent the value 3,000,000,000

Page 74: Integer numerical data types. The integer data types (multiple !) The integer data types use the binary number system as encoding method There are a number.

Overflow (cont.)

• Example Program: (Demo above code)     – Prog file:

http://mathcs.emory.edu/~cheung/Courses/170/Syllabus/04/Progs/Overflow.java

• How to run the program:        

• Right click on link and save in a scratch directory

• To compile:   javac Overflow.java

• To run:          java Overflow

Page 75: Integer numerical data types. The integer data types (multiple !) The integer data types use the binary number system as encoding method There are a number.

Overflow (cont.)

• What can you do about overflow ?

• You must know how large the values can be

• If you are not sure, then use the largest possible data type available.