210 likes | 338 Vues
This lecture introduces the fundamentals of how computers represent numbers using different numerical systems. Covering the decimal system's role and the transition to binary, hexadecimal, and octal systems, we explore the algorithms for conversions and operations on integers, including addition, multiplication, and bitwise operations. We also discuss signed vs. unsigned numbers and the implications of overflow in computations. This session lays the groundwork for understanding data representation and manipulation in computer programming and digital systems.
E N D
Intro to CS – Honors IRepresenting Numbers Georgios Portokalidis gportoka@stevens.edu
Today’s Lecture • Numerical systems • How do computers represent numbers • Operations on integers • Signed and unsigned numbers
Numerical Systems • We all know well the decimal system • Base 10 system • The number can be actually expressed as: 4x102 + 6x101 + 6x100 • So a number N base 10 is denoted as (N)10 • uses digits 0..9 • And a digit d in position i has the value dix10i • How about base 2, (N)2? • Can you also do base 16 or 8? Tens Ones Hundreds 4 6 6 102 100 101
Decimal to Binary • A simple algorithm • Let D= the number we wish to convert from decimal to binary • Find P, such that 2P is the largest power of two smaller or equal to D. • Repeat until P<0 • If 2P<=D then • Put 1 into column P • Subtract 2P from D • Else • Put 0 into column P • Subtract 1 from P • (356)10 (??)2
Decimal to Binary (cont’d) • All binary numbers N can be represented as • B = dix2i+ di-1x2i-1+...+d1x21+ d0x20 , • where dibinary digit in position i • Odd numbers have d0=1 and even d0=0 • This reveals the rightmost bit of N • We need to shift the number to the right by 1 bit to again calculate its last bit • (B - d0x20)/2 dix2i-1+ di-1x2i-2+...+d1x20 • An alternative algorithm • Let D= the number we wish to convert from decimal to binary • Repeat until D equals 0 • Divide D with 2 (D/2) • Prepend the remainder of the division to the left of the binary number • Let D be the quotient of the division • (257)10 (??)2
Hexadecimal 4 binary digits correspond to one hexadecimal digit • Base 16 number system • Digits are [0..9] [A..F] • Letters are case insensitive • Converting from binary to hexadecimal • There are some benefits 16 being a power of 2 • What is 1010 0010 in hex? • Answer: 0xC2 • Note the ‘0x’ prefix! • Converting from decimal to hex • Use the same algorithm as for converting decimal to binary • (76)10 (??)16
Number Representation • Computer systems use the binary numerical system • Numbers need to be stored in fixed-size elements, such as the registers, hence they cannot be arbitrarily long • The smallest addressable piece of memory is a byte - 8 bits • CPU registers are 32-bit or 64-bit long • Most Significant Bit (MSB) = Leftmost bit in number, the bit with the highest value • Least Significant Bit (LSB) = Rightmost bit in number, the bit with the smallest value
Binary Addition • 1010 • +1111 • -------- • Cheat sheet: • 0+0=0 • 1+0=1 • 1+1=10 • Column 20: 0+1=1.Record the 1. Temporary Result: 1; Carry: 0 • Column 21: 1+1=10. Record the 0, carry the 1.Temporary Result: 01; Carry: 1 • Column 22: 1+0=1 Add 1 from carry: 1+1=10. Record the 0, carry the 1.Temporary Result: 001; Carry: 1 • Column 23: 1+1=10. Add 1 from carry: 10+1=11.Record the 11. Final result: 11001
Binary Multiplication • 1010 • x 11 • --------- • Cheat sheet • 0x0=0 • 1x0=0 • 0x1=0 • 1x1=1 • Multiplying by 2 is easy, just shift in (append) a 0 from the right • How about multiplying with 4 or 8?
Overflows • Integer overflows occur when the result of an operation requires more bits than the length of the number involved Example with unsigned bytes 1001 1100 +0110 0111 ---------------- 1 0000 0011 The overflowing bit is lost
Binary Division • 111011 / 11 • Same rules as in decimal division • When dividing integers the remainder is ignored
Bitwise NOT or One’s Complement • Bitwise operations are logical operations on the individual bits of one or two numbers • Performs logical negation of each bit in the number • Just flip each bit’s value • Example: • NOT 0100 0110 = • 1011 1001
Bitwise AND • Takes two numbers and performs the logical AND operation on each pair of corresponding bits • Example: • 0100 0110 • AND 0110 1100 = • 0100 0100
Bitwise OR • Takes two numbers and performs the logical OR operation on each pair of corresponding bits • Example: • 0100 0110 • OR 0110 1100 = • 0110 1110
Bitwise XOR • Takes two numbers and performs the logical XOR (eXclusiveOR) operation on each pair of corresponding bits • Example: • 0100 0110 • XOR 0110 1100 = • 0010 1010
Signed Numbers • Sign-magnitude notation • Use the leftmost bit of a number as the equivalent of a sign: “0” is “+”, “1” is “-” • Example: 12 0000 1100, -12 1000 1100 • One’s complement • Flip all bits. The leftmost bit still indicates signed-ness • Example: 12 0000 1100, -12 1111 0011 • Two’s complement • Flip all bits, and add 1. The leftmost bit still indicates signed-ness • Example: 12 0000 1100, -12 1111 0100 • Excess 2(m-1) • m is the length of the number in bits. Every number is represented by adding it to 2(m-1) • Example: 12 27+12=140 1000 1100, -12 27-12=116 0111 0100 • Numbers are the same as two’s complement with sign bit flipped The largest signed number is smaller, than the largest unsigned number
Why So Many Ways? • Let’s perform the following binary additions (-5+12), (-12+-5), and (12+-12) • Two’s complement makes the addition of both signed and unsigned integers • Different programming languages may use different ways of representing numbers • Java uses two’s complement for signed numbers
Overflows and Signed Integers • Integer overflows occur when the result of an operation requires more bits than the length of the number involved Example with unsigned bytes 1001 1100 +0110 0111 ---------------- 1 0000 0011 Example with signed bytes 0001 1100 +0110 0111 ---------------- 1000 0011 The overflow happens into the sign bit The overflowing bit is lost
Shifting Bits • The bits of a number can be moved or shifted to the left or right • Numbers are stored in fixed-size registers in the CPU • Moving bits can cause bits to shift-out and others to shift-in • Logical shift • Integers are treated as bit-strings • Appropriate for unsigned integers Example: 1001 1000 shift left 3 = 1100 0000 Example: 1001 1000 shift right 2 = 0010 0110 Zeroes are shifted in Shifted-out bits are lost
Shifting Bits • The bits of a number can be moved or shifted to the left or right • Numbers are stored in fixed-size registers in the CPU • Moving bits can cause bits to shift-out and others to shift-in • Logical shift • Integers are treated as bit-strings • Appropriate for unsigned integers • Arithmetic shift • Integers are treated as numbers • Appropriate for signed integers Example: 1001 1000 shift left 3 = 1100 0000 Example: 1001 1000 shift right 2 = 1110 0110 Zeroes are shifted in Shifted-out bits are lost The leftmost bit is used when shifting-in bits from the left
Summary • Numbers can be represented in different numerical systems • Computer use the binary system • Arithmetic operations like addition, multiplication, and division are straightforward • Bitwise operations perform actions on individuals bits of numbers • There are multiple ways to represent signed numbers • Two’s complement is the one used in most computers due to its simplicity • Numbers in the CPU have fixed length, so beware of overflows • Shift operations allow you to move bits in a number • The bits shifted-in from the left depend on whether we are performing an arithmetic or logical shift