54
Under the Hood: Data Representation Computer Science 104 Lecture 2

Under the Hood: Data Representation Computer Science 104

  • Upload
    others

  • View
    0

  • Download
    0

Embed Size (px)

Citation preview

Under the Hood: Data Representation

Computer Science 104 Lecture 2

2 © Alvin R. Lebeck / Andrew Hilton

Admin

Piazza, Sakai Up • Everyone should have access

Homework 1 Posted • Due Feb 6 • PDF or Plain Text Only: No Word or RTF

− Recommended: Learn LaTeX

CPS 104

3 © Alvin R. Lebeck / Andrew Hilton Compsci 104

Last Time on CS104….

Who can remind us what we talked about last time?

4 © Alvin R. Lebeck / Andrew Hilton Compsci 104

Last Time on CS104….

Who can remind us what we talked about last time? • Course policies • Why to take this course • Everything is a number it is all 1s and 0s • Number representations

− Decimal − Binary − Hexadecimal (“hex”) − Octal

5 © Alvin R. Lebeck / Andrew Hilton

Converting Numbers

Hex to Binary: • Expand each hex digit to 4 bits:

0xFC1 = 111111000001

Binary to Hex: • Group up 4 bits into a digit:

11010110011 = 0x6B3

Binary to Decimal: • Add up values of bits with 1:

1001101 = 64 + 8 + 4 + 1 = 77

CPS 104

6 © Alvin R. Lebeck / Andrew Hilton

Converting Numbers

Converting Decimal to Binary Suppose I want to convert 4872 to binary How would I do this? …. Think about it for a second

CPS 104

7 © Alvin R. Lebeck / Andrew Hilton

Converting Numbers

Converting Decimal to Binary Suppose I want to convert 4872 to binary How would I do this? …. Think about it for a second

4872 - 4096 776

CPS 104

4096 1 2048 1024 512 256 128 64 32 16 8 4 2 1

8 © Alvin R. Lebeck / Andrew Hilton

Converting Numbers

Converting Decimal to Binary Suppose I want to convert 4872 to binary How would I do this? …. Think about it for a second

4872 - 4096 776 - 512 264

CPS 104

4096 1 2048 0 1024 0 512 1 256 128 64 32 16 8 4 2 1

9 © Alvin R. Lebeck / Andrew Hilton

Converting Numbers

Converting Decimal to Binary Suppose I want to convert 4872 to binary How would I do this? …. Think about it for a second

4872 - 4096 776 - 512 264 - 256 8

CPS 104

4096 1 2048 0 1024 0 512 1 256 1 128 64 32 16 8 4 2 1

10 © Alvin R. Lebeck / Andrew Hilton

Converting Numbers

Converting Decimal to Binary Suppose I want to convert 4872 to binary How would I do this? …. Think about it for a second

4872 - 4096 776 - 512 264 - 256 8 - 8 0

CPS 104

4096 1 2048 0 1024 0 512 1 256 1 128 0 64 0 32 0 16 0 8 1 4 2 1

11 © Alvin R. Lebeck / Andrew Hilton

Converting Numbers

Converting Decimal to Binary Suppose I want to convert 4872 to binary How would I do this? …. Think about it for a second

4872 - 4096 776 - 512 264 - 256 8 - 8 0

CPS 104

4096 1 2048 0 1024 0 512 1 256 1 128 0 64 0 32 0 16 0 8 1 4 0 2 0 1 0

12 © Alvin R. Lebeck / Andrew Hilton

What about negative numbers?

This works great for N >= 0… But what about negative numbers?

• Sometimes we don’t need them: unsigned number • Sometimes kind of important: signed number

Many options: • Sign magnitude • 1’s complement • 2’s complement • Biased

CPS 104

13 © Alvin R. Lebeck / Andrew Hilton

Sign Magnitude

Use leftmost bit for + (0) or – (1): 6-bit example (1 sign bit + 5 magnitude bits): +17 = 010001 -17 = 110001 Pros:

• Conceptually simple • Easy to convert

Cons: • Harder to compute (add, subtract, etc) with • Positive and negative 0: 000000 and 100000

CPS 104

14 © Alvin R. Lebeck / Andrew Hilton CPS 104

1’s Complement Representation for Integers

Use largest positive binary numbers to represent negative numbers

To negate a number, invert (“not”) each bit: 0->1 1->0 Cons:

• Still two 0s • Still hard to compute with

0000 0 0001 1 0010 2 0011 3 0100 4 0101 5 0110 6 0111 7 1000 -7 1001 -6 1010 -5 1011 -4 1100 -3 1101 -2 1110 -1 1111 -0

15 © Alvin R. Lebeck / Andrew Hilton CPS 104

2’s Complement Representation for Integers

To negated, flip bits, add 1: • 1’s complement + 1

Pros: • Easy to compute with • One representation of 0

Cons: • More complex negation • Extra negative number (-8)

Ubiquitous choice

0000 0 0001 1 0010 2 0011 3 0100 4 0101 5 0110 6 0111 7 1000 -8 1001 -7 1010 -6 1011 -5 1100 -4 1101 -3 1110 -2 1111 -1

16 © Alvin R. Lebeck / Andrew Hilton

Binary Math : Addition

Suppose we want to add two numbers:

00011101

+ 00101011

How do we do this?

CPS 104

17 © Alvin R. Lebeck / Andrew Hilton

Binary Math : Addition

Suppose we want to add two numbers:

00011101 695

+ 00101011 + 232

How do we do this? • Let’s revisit decimal addition • Think about the process as we do it

CPS 104

18 © Alvin R. Lebeck / Andrew Hilton

Binary Math : Addition

Suppose we want to add two numbers:

00011101 695

+ 00101011 + 232 7 First add one’s digit 5+2 = 7

CPS 104

19 © Alvin R. Lebeck / Andrew Hilton

Binary Math : Addition

Suppose we want to add two numbers: 1 00011101 695

+ 00101011 + 232 27 First add one’s digit 5+2 = 7 Next add ten’s digit 9+3 = 12 (2 carry a 1)

CPS 104

20 © Alvin R. Lebeck / Andrew Hilton

Binary Math : Addition

Suppose we want to add two numbers: 1 00011101 695

+ 00101011 + 232 927 First add one’s digit 5+2 = 7 Next add ten’s digit 9+3 = 12 (2 carry a 1) Last add hundred’s digit 1+6+2 = 9

CPS 104

21 © Alvin R. Lebeck / Andrew Hilton

Binary Math : Addition

Suppose we want to add two numbers:

00011101

+ 00101011

Back to the binary: First add 1’s digit 1+1 = …?

CPS 104

22 © Alvin R. Lebeck / Andrew Hilton

Binary Math : Addition

Suppose we want to add two numbers: 1 00011101

+ 00101011 0 Back to the binary: First add 1’s digit 1+1 = 2 (0 carry a 1)

CPS 104

23 © Alvin R. Lebeck / Andrew Hilton

Binary Math : Addition

Suppose we want to add two numbers: 11 00011101

+ 00101011 00 Back to the binary: First add 1’s digit 1+1 = 2 (0 carry a 1) Then 2’s digit: 1+0+1 =2 (0 carry a 1) You all finish it out….

CPS 104

24 © Alvin R. Lebeck / Andrew Hilton

Binary Math : Addition

Suppose we want to add two numbers: 111111 00011101 = 29

+ 00101011 = 43 01001000 = 72 Can check our work in decimal

CPS 104

25 © Alvin R. Lebeck / Andrew Hilton

Binary Math : Addition

What about this one:

01011101

+ 01101011

CPS 104

26 © Alvin R. Lebeck / Andrew Hilton

Binary Math : Addition

What about this one: 1111111 01011101 = 93

+ 01101011 = 107 11001000 = -56

But… that can’t be right? • What do you expect for the answer? • What is it in 8-bit signed 2’s complement?

CPS 104

27 © Alvin R. Lebeck / Andrew Hilton

Integer Overflow

Answer should be 200 • Not representable in 8-bit signed representation • No right answer

Call Integer Overflow • Signed addition: CI != CO of last bit • Unsigned addition: CO != 0 of last bit

Real problem in programs • SNES SimCity Cheat • Can easily imagine more serious cases • Awareness can make you better programmer

CPS 104

28 © Alvin R. Lebeck / Andrew Hilton

Subtraction

2’s complement makes subtraction easy: • Remember: A - B = A + (-B) • And: -B = ~B + 1 that means flip bits (“not”) • So we just flip the bits and start with CI = 1 • Later: No new circuits to subtract (re-use add)

1

0110101 -> 0110101 - 1010010 + 0101101

CPS 104

29 © Alvin R. Lebeck / Andrew Hilton CPS 104

What About Non-integer Numbers?

There are infinitely many real numbers between two integers

Many important numbers are real •  Pi = 3.145… •  ½ = 0.5

How could we represent these sorts of numbers? • Remember, we only have integers… • Everyone think for a few minutes • Feel free to brainstorm with your neighboors…

30 © Alvin R. Lebeck / Andrew Hilton

Option 1: Fixed point

Use normal integers, but (X*2K) instead of X • Example: 32 bit int, but use X*65536 • 3.1415926 * 65536 = 205887 • 0.5 * 65536 = 32768 , etc..

Pros: • Addition/subtraction just like integers (“free”)

Cons: • Mul/div require renormalizing (divide by 64K) • Range limited (no good rep for large + small)

Can be good in specific situations

CPS 104

31 © Alvin R. Lebeck / Andrew Hilton

Option 2: Rational Numbers

Represent each number as fraction: X / Y • X and Y are integers (say 16 bits each) • 0.5 = (1,2) • 3.1415926 = (31415, 1000)

Pros: • Represent a lot of numbers • Precision in some cases (e.g., 1/3)

Cons: • Hard to work with • Multiple representations for many numbers

CPS 104

32 © Alvin R. Lebeck / Andrew Hilton

Can we do better?

Think about scientific notation for a second: For example:

6.02 * 1023

Real number, but comprised of ints: • 6 generally only 1 digit here • 2 any number here • 10 always 10 (base we work in) • 23 can be positive or negative

Can we do something like this in binary?

CPS 104

33 © Alvin R. Lebeck / Andrew Hilton

Option 3: Floating Point

How about: +/- X.YYYYYY * 2+/-N

Big numbers: large positive N Small numbers (<1): negative N Numbers near 0: small N

This is “floating point” : most common way

CPS 104

34 © Alvin R. Lebeck / Andrew Hilton

IEEE single precision floating point

Specific format called IEEE single precision: +/- 1.YYYYY * 2(N-127)

“float” in Java, C, C++,…

Assume X is always 1 (save a bit) 1 sign bit (+ = 0, 1 = -) 8 bit biased exponent (do N-127) Implicit 1 before binary point 23-bit mantissa (YYYYY)

CPS 104

35 © Alvin R. Lebeck / Andrew Hilton

Binary fractions

1.YYYY has a binary point • Like a decimal point but in binary • After a decimal point, you have

− tenths − hundredths − Thousandths − ….

So after a binary point you have…

CPS 104

36 © Alvin R. Lebeck / Andrew Hilton

Binary fractions

1.YYYY has a binary point • Like a decimal point but in binary • After a decimal point, you have

− Tenths − Hundredths − Thousandths − ….

So after a binary point you have… • Halves • Quarters • Eights • ….

CPS 104

37 © Alvin R. Lebeck / Andrew Hilton

Floating point example

Binary fraction example: 101.101 = 4 + 1 + ½ + 1/8 = 5.625 For floating point, needs normalization: 1.01101 * 22 Sign is +, which = 0 Exponent = 127 + 2 = 129 = 1000 0001 Mantissa = 1.011 0100 0000 0000 0000 0000

CPS 104

0 1000 0001 011 0100 0000 0000 0000 0000 0 22 23 30 31

38 © Alvin R. Lebeck / Andrew Hilton CPS 104

Floating Point Representation

Example: What floating-point number is: 0xC1580000?

39 © Alvin R. Lebeck / Andrew Hilton CPS 104

Answer

What floating-point number is 0xC1580000? 1100 0001 0101 1000 0000 0000 0000 0000

1 1000 0010 101 1000 0000 0000 0000 0000 X = 0 22 23 30 31

s E F

Sign = 1 which is negtiave Exponent = (128+2)-127 = 3 Mantissa = 1.1011 -1.1011x23 = -1101.1 = -13.5

40 © Alvin R. Lebeck / Andrew Hilton

Trick question

How do you represent 0.0? • Why is this a trick question?

CPS 104

41 © Alvin R. Lebeck / Andrew Hilton

Trick question

How do you represent 0.0? • Why is this a trick question? • 0.0 = 000000000 • But need 1.XXXXX representation?

CPS 104

42 © Alvin R. Lebeck / Andrew Hilton

Trick question

How do you represent 0.0? • Why is this a trick question? • 0.0 = 000000000 • But need 1.XXXXX representation?

Exponent of 0 is denormalized •  Implicit 0. instead of 1. in mantissa • Allows 0000….0000 to be 0 • Helps with very small numbers near 0

Results in +/- 0 in FP (but they are “equal”)

CPS 104

43 © Alvin R. Lebeck / Andrew Hilton

Other weird FP numbers

Exponent = 1111 1111 also not standard • All 0 mantissa: +/- ∞

1/0 = +∞ -1/0 = -∞

• Non zero mantissa: Not a Number (NaN) sqrt(-42) = NaN

CPS 104

44 © Alvin R. Lebeck / Andrew Hilton CPS 104

Floating Point Representation

Double Precision Floating point:

64-bit representation: • 1-bit sign • 11-bit (biased) exponent • 52-bit fraction (with implicit 1).

“double” in Java, C, C++, …

1 11-bit 52 - bit Exp S Mantissa

45 © Alvin R. Lebeck / Andrew Hilton

Ints and Floats

int x = 1930754307; float f = x; System.out.println(x);

x = f; System.out.println(x);

Is this Java Legal?

CPS 104

46 © Alvin R. Lebeck / Andrew Hilton

Ints and Floats

int x = 1930754307; float f = x; System.out.println(x);

x = (int) f; System.out.println(x);

Is this Java Legal? • Java worries you might chop off a fraction • Requires a cast • Does not worry about f = x why not?

CPS 104

47 © Alvin R. Lebeck / Andrew Hilton

Ints and Floats

int x = 1930754307; float f = x; System.out.println(x);

x = (int) f; System.out.println(x);

Program output: 1930754307 1930754304

Why? CPS 104

48 © Alvin R. Lebeck / Andrew Hilton

Ints and Floats

int x = 1930754307; float f = x; System.out.println(x);

x = (int) f; System.out.println(x);

Program output: Hint 1930754307 0x7314f903 1930754304 0x7314f900

Why? CPS 104

49 © Alvin R. Lebeck / Andrew Hilton

Danger: floats cannot hold all ints!

Many programmers think: • Floats can represent all ints • NOT true

First summer internship I had: • Need some floats and some ints: just use floats! • Bug in their code! • Other developers shocked as I demonstrated

problem… Doubles can represent all 32-bit ints (but not all 64-bit ints)

CPS 104

1 11-bit 52 - bit Exp S Mantissa

1 8-bit 23- bit 0 22 23 30 31

Mantissa Exp

50 © Alvin R. Lebeck / Andrew Hilton CPS 104

What about characters/strings?

Many important things stored as strings… •  Your name

What is a string? How should we represent strings?

51 © Alvin R. Lebeck / Andrew Hilton CPS 104

ASCII Character Representation

000 nul 001 soh 002 stx 003 etx 004 eot 005 enq 006 ack 007 bel 010 bs 011 ht 012 nl 013 vt 014 np 015 cr 016 so 017 si 020 dle 021 dc1 022 dc2 023 dc3 024 dc4 025 nak 026 syn 027 etb 030 can 031 em 032 sub 033 esc 034 fs 035 gs 036 rs 037 us 040 sp 041 ! 042 " 043 # 044 $ 045 % 046 & 047 ' 050 ( 051 ) 052 * 053 + 054 , 055 - 056 . 057 / 060 0 061 1 062 2 063 3 064 4 065 5 066 6 067 7 070 8 071 9 072 : 073 ; 074 < 075 = 076 > 077 ? 100 @ 101 A 102 B 103 C 104 D 105 E 106 F 107 G 110 H 111 I 112 J 113 K 114 L 115 M 116 N 117 O 120 P 121 Q 122 R 123 S 124 T 125 U 126 V 127 W 130 X 131 Y 132 Z 133 [ 134 \ 135 ] 136 ^ 137 _ 140 ` 141 a 142 b 143 c 144 d 145 e 146 f 147 g 150 h 151 i 152 j 153 k 154 l 155 m 156 n 157 o 160 p 161 q 162 r 163 s 164 t 165 u 166 v 167 w 170 x 171 y 172 z 173 { 174 | 175 } 176 ~ 177 del

Oct. Chr.

Each character is represented by a 7-bit ASCII code. It is packed into 8-bits

52 © Alvin R. Lebeck / Andrew Hilton

Unicode

Many types UTF-8: variable length encoding backward

compatible with ASCII • Linux

UTF-16: variable length • Windows, Java

UTF-32: fixed length

CPS 104

53 © Alvin R. Lebeck / Andrew Hilton CPS 104

Basic Data Types

Bit: 0, 1 Bit String: sequence of bits of a particular length 4 bits is a nibble 8 bits is a byte 16 bits is a half-word 32 bits is a word 64 bits is a double-word Character: ASCII 7 bit code (packed in a byte) Decimal: (BCD code) digits 0-9 encoded as 0000 thru 1001 two decimal digits packed per 8 bit byte Integers: 2's Complement (32-bit representation).

Floating Point: Single Precision (32-bit representation). Double Precision (64-bit representation). Extended Precision(128 -bit representation).

• How many +/- #'s? • Where is decimal pt? • How are +/- exponents represented?

54 © Alvin R. Lebeck / Andrew Hilton CPS 104

Next time

Memory Pointers Arrays Strings Bitwise operations

Instruction Set Architecture Reading Start Chapter 2