computer science 111 fundamentals of programming i number systems

21
Computer Science 111 Fundamentals of Programming I Number Systems

Upload: oscar-harmon

Post on 29-Dec-2015

225 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: Computer Science 111 Fundamentals of Programming I Number Systems

Computer Science 111

Fundamentals of Programming I

Number Systems

Page 2: Computer Science 111 Fundamentals of Programming I Number Systems

Numeric Types: int

• int is used for integers

• In many languages, the range of int is -231 through 231 - 1

• In Python, an integer’s magnitude is limited only by the computer’s memory

Page 3: Computer Science 111 Fundamentals of Programming I Number Systems

Why 231 - 1?

• Numbers are stored in computer memory as patterns of voltage levels

• Just two voltage levels, ON and OFF, are significant on a digital computer

• ON and OFF represent the digits 1 and 0 of the binary number system

• All numbers are represented in binary in a digital computer

Page 4: Computer Science 111 Fundamentals of Programming I Number Systems

Computer Memory0 1 0 1 1 1 1 1 0 1 0 1 1 1 1 1 0 1 0 1 1 1 1 1 0 1 0 1 1 1 1 1

0 1 0 1 1 1 1 1 0 1 0 1 1 1 1 1 0 1 0 1 1 1 1 1 0 1 0 1 1 1 1 1

0 1 0 1 1 1 1 1 0 1 0 1 1 1 1 1 0 1 0 1 1 1 1 1 0 1 0 1 1 1 1 1

0 1 0 1 1 1 1 1 0 1 0 1 1 1 1 1 0 1 0 1 1 1 1 1 0 1 0 1 1 1 1 1

0 1 0 1 1 1 1 1 0 1 0 1 1 1 1 1 0 1 0 1 1 1 1 1 0 1 0 1 1 1 1 1

Memory might have billions of cells that support the storage of trillions of binary digits or bits of information

Each cell in this memory has room for 32 bits

Page 5: Computer Science 111 Fundamentals of Programming I Number Systems

Bits and Bytes

0 1 0 1 1 1 1 1 0 1 0 1 1 1 1 1 0 1 0 1 1 1 1 1 0 1 0 1 1 1 1 1

A byte is 8 bits

In some languages, int uses 4 bytes

The magnitude and the sign (+/-) of the number are determined by the binary representation

byte byte byte byte

Page 6: Computer Science 111 Fundamentals of Programming I Number Systems

Decimal and Binary

• Decimal numbers use the 10 decimal digits and a base of 10

• Binary numbers use the binary digits 0 and 1 and a base of 2

• The base is often provided as a subscript to indicate the type of system, as in 304210 and 110111102

• Thus, 110110 is very different from 11012

Page 7: Computer Science 111 Fundamentals of Programming I Number Systems

Positional Notation

• Number systems are positional, so the magnitude of the number depends on the base and the position of the digits in the number

• Each position represents a power of the number’s base

• For example, in a 3-digit decimal number, the three positions represent the number of hundreds (102), tens (101), and ones (100)

• 342 = 3 * 102 + 4 * 101 + 2 * 100 • = 3 * 100 + 4 * 10 + 2 * 1 • = 300 + 40 + 2• = 342

Page 8: Computer Science 111 Fundamentals of Programming I Number Systems

Positional Notation: Binary

• The base is now 2 and the only digits are 0 and 1

• Each position represents a power of 2

• For example, in a 4-digit binary number, the four positions represent the number of eights (23), fours (22), twos (21), and ones (10)

• 1101 = 1 * 23 + 1 * 22 + 0 * 21 + 1 * 20 • = 1 * 8 + 1 * 4 + 0 * 2 + 1 * 1 • = 8 + 4 + 0 + 1• = 13

Page 9: Computer Science 111 Fundamentals of Programming I Number Systems

An Algorithm for Binary to Decimal Conversion

# Input: A string of 1 or more binary digits# Output: The integer represented by the stringbinary = input("Enter a binary number: ")decimal = 0exponent = len(binary) – 1for digit in binary: decimal = decimal + int(digit) * 2 ** exponent exponent = exponent – 1print("The integer value is", decimal)

The len function returns the number of characters in a string

The for loop visits each character in a string

Page 10: Computer Science 111 Fundamentals of Programming I Number Systems

Counting in BinaryBinary Magnitude

0 0

1 1

10 2

11 3

100 4

101 5

110 6

111 7

1000 8

21

22

23

Each power of 2 in binary is a 1 followed by the number of 0s equal to the exponent

What is the magnitude of 10000002?

Page 11: Computer Science 111 Fundamentals of Programming I Number Systems

Counting in BinaryBinary Magnitude

0 0

1 1

10 2

11 3

100 4

101 5

110 6

111 7

1000 8

21 - 1

22 - 1

23 - 1

Each number with only 1s equals one less than the power of 2 whose exponent is that number of 1s

What is the magnitude of 11112?

Page 12: Computer Science 111 Fundamentals of Programming I Number Systems

Limits of Magnitude - Unsigned ints

• Unsigned integers are the non-negative integers

• The largest unsigned integer that can be represented using N bits is 2N - 1 (all bits are 1s)

• Thus, the largest unsigned integer stored in 32 bits is 232 - 1

Page 13: Computer Science 111 Fundamentals of Programming I Number Systems

Limits of Magnitude - Signed ints

• Signed integers include negative and positive integers and 0

• Part of the memory (one bit) must be reserved to represent the number’s sign somehow

• For each bit unavailable, you must subtract 1 from the exponent (2N-1) of the number’s magnitude

• Thus, the largest positive signed integer stored in 32 bits is 231 - 1

Page 14: Computer Science 111 Fundamentals of Programming I Number Systems

Twos Complement Notation

• Positive numbers have 0 in the leftmost bit, negative numbers have 1 in the leftmost bit

• To compute a negative number’s magnitude, – Invert all the bits– Add 1 to the result– Use the conversion algorithm

• To represent a negative number,– Translate the magnitude to an unsigned binary number– Invert all the bits– Add 1 to the result

Page 15: Computer Science 111 Fundamentals of Programming I Number Systems

Convert Decimal to Binary

• Start with an integer, N, and an empty string, S

• Assume that N > 0

• While N > 0:– Compute the remainder of dividing N by 2 (will be 0 or 1)– Prepend the remainder’s digit to S– Reset N to the quotient of N and 2

Page 16: Computer Science 111 Fundamentals of Programming I Number Systems

An Algorithm for Decimal to Binary Conversion

# Input: An integer > 0# Output: A string representing the integer in base 2n = int(input("Enter an integer greater than 0: "))binary = ''while n > 0: rem = n % 2 binary = str(rem) + binary n = n // 2print(binary)

Here we want the quotient and the remainder, not exact division!

Page 17: Computer Science 111 Fundamentals of Programming I Number Systems

Numeric Types: float

• Uses 8 bytes to represent floating-point numbers that range from +10308.25 through -10308.25

• Default printing is up to 16 digits of precision

• But actual precision seems to extend even further - try format string with 60 places

Page 18: Computer Science 111 Fundamentals of Programming I Number Systems

Problems with Float

• Some numbers, such as 0.1, cannot be represented exactly, due to round-off errors

• This can cause errors when two floats are compared for equality

Page 19: Computer Science 111 Fundamentals of Programming I Number Systems

Example: Add 0.1 Ten Times

sum = 0.0for i in range(10): sum = sum + 0.1print(sum) # Displays 1.0print(sum < 1.0) # Displays True!

Convert dollars and cents to pennies (ints) in critical financial calculations!

Page 20: Computer Science 111 Fundamentals of Programming I Number Systems

Use int or float?

• In general, arithmetic operations are faster with integers than with floats

• Integers (regular ones) require less memory

• Use float when it’s convenient to do so and you’re not worried about losing numeric information

Page 21: Computer Science 111 Fundamentals of Programming I Number Systems

Reading For Monday

Finish Chapter 4