Binary Representation Binary Representation for Numbers Assume 4-bit numbers 5 as an integer 0101 -5 as an integer How? 5.0 as a real number How? What about 5.5? Sign Bit Reserve the most-significant bit to indicate sign Consider integers in 4 bits Most-significant bit is sign: 0 is positive, 1 is negative The 3 remaining bits is magnitude 0010 = 2 1010 = -2 How many possible combinations for 4 bits? How many unique integers using this scheme? Two’s Complement Advantages # of combinations of bits = # of unique integers Addition is “natural” Convert to two’s complement (and vice versa) 1. invert the bits 2. add one 3. ignore the extra carry bit if present Consider 4-bit numbers 0010 [2] -> 1101 -> 1110 [-2] Addition 0010 [2] + 1110 [-2] 0000 [ignoring the final carry—extra bit] 0011 [3] + 1110 [-2] 0001 [1] 1110 [-2] + 1101 [-3] 1011 [-5] Range of Two’s Complement 4-bit numbers Largest positive: 0111 (binary) => 7 (decimal) Smallest negative: 1000 (binary) => -8 (decimal) # of unique integers = # of bit combinations = 16 n bits ? Binary Real Numbers … 5.5 101.1 5.25 101.01 5.125 101.001 5.75 101.11 23 22 21 20 . 2-1 … 8 bits only 25 24 23 22 21 20 2-1 5.5 101.1 -> 000101 10 5.25 101.01 -> 000101 01 5.125 101.001 -> ?? With only 2 places after the point, the precision is .25 What if the point is allowed to move around? 2-2 Floating-point Numbers Decimal 54.3 5.43 x 101 [scientific notation] Binary 101.001 10.1001 x 21 1.01001 x 22 [more correctly: 10.1001 x 101] [more correctly: 1.01001 x 1010] What can we say about the most significant bit? Floating-point Numbers General form: sign 1.mantissa x 2exponent the most significant digit is right before the dot Always 1 [no need to represent it] Exponent in Two’s complement 1.01001 x 22 Sign: 0 (positive) Mantissa: 0100 Exponent: 010 (decimal 2) Java Floating-point Numbers sign exponent Sign: 1 bit [0 is positive] Mantissa: 23 bits in float 52 bits in double Exponent: 8 bits in float 11 bits in double mantissa Imprecision in Floating-Point Numbers Floating-point numbers often are only approximations since they are stored with a finite number of bits. Hence 1.0/3.0 is slightly less than 1/3. 1.0/3.0 + 1.0/3.0 + 1.0/3.0 could be less than 1. www.cs.fit.edu/~pkc/classes/iComputing/FloatEquality.java Abstraction Levels Binary Data Numbers (unsigned, signed [Two’s complement], floating point) Text (ASCII, Unicode) • HTML Color • Image (JPEG) Video (MPEG) Sound (MP3) Instructions Machine language (CPU-dependent) Text (ASCII) Assembly language (CPU-dependent) • High-level language (CPU -independent: Java, C++, FORTRAN)