Lecture 02
Lecture 02
reading:
Bryant & O’Hallaron, Ch. 2.2-2.3
This document is copyright (C) Stanford Computer Science, Lisa Yan, and Nick Troccoli, licensed under Creative Commons Attribution 2.5 License. All rights reserved.
Based on slides created by Cynthia Lee, Chris Gregg, Jerry Cain and others.
1
CS107 Topic 1: How can a
computer represent integer
numbers?
2
CS107 Topic 1
How can a computer represent integer numbers?
4
Demo: Unexpected
Behavior
cp -r /afs/ir/class/cs107/lecture-code/lect2 . 5
Lecture Plan
• Bits and Bytes
• Hexadecimal
• Integer Representations
• Unsigned Integers
• Signed Integers
• Overflow
6
Lecture Plan
• Bits and Bytes
• Hexadecimal
• Integer Representations
• Unsigned Integers
• Signed Integers
• Overflow
7
0
8
1
9
Bits
Computers are built around the idea of two states: “on” and “off”. Transistors
represent this in hardware, and bits represent this in software!
10
One Bit At A Time
• We can combine bits, like with base-10 numbers, to represent more data. 8
bits = 1 byte.
• Computer memory is just a large array of bytes! It is byte-addressable; you
can’t address (store location of) a bit; only a byte.
• Computers still fundamentally operate on bits; we have just gotten more
creative about how to represent different data as bits!
• Images
• Audio
• Video
• Text
• And more…
11
Base 10
5934
Digits 0-9 (0 to base-1)
12
Base 10
5934
d s s tens ones
n re d
u sa n d
th o h u
5934
103 102 101 100
14
Base 10
10X:
5934
3 2 1 0
15
Base 2
2X :
1011
3 2 1 0
16
Base 2
1011
23 22 21 20
17
Base 2
1011
eights fours twos ones
0 1
_ _ 1
_ 0
_
23 22 21 20
= 0*8 + 1*4 + 1*2 + 0*1 = 6 19
Practice: Base 2 to Base 10
What is the base-2 value 1010 in base-10?
a) 20
b) 101
c) 10
d) 5
e) Other
20
Practice: Base 10 to Base 2
What is the base-10 value 14 in base 2?
a) 1111
b) 1110
c) 1010
d) Other
21
Byte Values
What is the minimum and maximum base-10 value a single byte (8 bits) can
store? minimum = 0 maximum = ?255
2x :
11111111
7 6 5 4 3 2 1 0
• Strategy 1: 1*27 + 1*26 + 1*25 + 1*24 + 1*23+ 1*22 + 1*21 + 1*20 = 255
• Strategy 2: 28 – 1 = 255
22
Multiplying by Base
1450 x 10 = 14500
11002 x 2 = 11000
Key Idea: inserting 0 at the end multiplies by the base!
23
Dividing by Base
1450 / 10 = 145
11002 / 2 = 110
Key Idea: removing 0 at the end divides by the base!
24
Lecture Plan
• Bits and Bytes
• Hexadecimal
• Integer Representations
• Unsigned Integers
• Signed Integers
• Overflow
25
Hexadecimal
When working with bits, oftentimes we have large numbers with 32 or 64 bits.
• Instead, we’ll represent bits in base-16 instead; this is called hexadecimal.
26
Hexadecimal
• When working with bits, oftentimes we have large numbers with 32 or 64 bits.
• Instead, we’ll represent bits in base-16 instead; this is called hexadecimal.
27
Hexadecimal
Hexadecimal is base-16, so we need digits for 1-15. How do we do this?
0 1 2 3 4 5 6 7 8 9 a b c d e f
10 11 12 13 14 15
28
Hexadecimal
Hex digit 0 1 2 3 4 5 6 7
Decimal value 0 1 2 3 4 5 6 7
Binary value 0000 0001 0010 0011 0100 0101 0110 0111
Hex digit 8 9 A B C D E F
Decimal value 8 9 10 11 12 13 14 15
Binary value 1000 1001 1010 1011 1100 1101 1110 1111
29
Hexadecimal
• We distinguish hexadecimal numbers by prefixing them with 0x, and binary
numbers with 0b.
• E.g. 0xf5 is 0b11110101
0x f 5
1111 0101
30
Practice: Hexadecimal to Binary
What is 0x173A in binary?
Hexadecimal 1 7 3 A
Binary 0001 0111 0011 1010
31
Practice: Hexadecimal to Binary
What is 0b1111001010 in hexadecimal? (Hint: start from the right)
32
Hexadecimal: It’s funky but concise
• Let’s take a byte (8 bits):
Base-10: Human-readable,
165 but cannot easily interpret on/off bits
33
Lecture Plan
• Bits and Bytes
• Hexadecimal
• Integer Representations
• Unsigned Integers
• Signed Integers
• Overflow
34
Number Representations
• Unsigned Integers: positive and 0 integers. (e.g. 0, 1, 2, … 99999…
• Signed Integers: negative, positive and 0 integers. (e.g. …-2, -1, 0, 1,… 9999…)
35
Number Representations
• Unsigned Integers: positive and 0 integers. (e.g. 0, 1, 2, … 99999…
• Signed Integers: negative, positive and 0 integers. (e.g. …-2, -1, 0, 1,… 9999…)
36
Number Representations
37
In The Days Of Yore…
38
Transitioning To Larger Datatypes
• Early 2000s: most computers were 32-bit. This means that pointers were 4
bytes (32 bits).
• 32-bit pointers store a memory address from 0 to 232-1, equaling 232 bytes of
addressable memory. This equals 4 Gigabytes, meaning that 32-bit
computers could have at most 4GB of memory (RAM)!
• Because of this, computers transitioned to 64-bit. This means that datatypes
were enlarged; pointers in programs were now 64 bits.
• 64-bit pointers store a memory address from 0 to 264-1, equaling 264 bytes of
addressable memory. This equals 16 Exabytes, meaning that 64-bit
computers could have at most 1024*1024*1024*16 GB of memory (RAM)! 39
Lecture Plan
• Bits and Bytes
• Hexadecimal
• Integer Representations
• Unsigned Integers
• Signed Integers
• Overflow
40
Unsigned Integers
• An unsigned integer is 0 or a positive integer (no negatives).
• We have already discussed converting between decimal and binary, which is a
nice 1:1 relationship. Examples:
0b0001 = 1
0b0101 = 5
0b1011 = 11
0b1111 = 15
• The range of an unsigned number is 0 → 2w - 1, where w is the number of bits.
E.g. a 32-bit integer can represent 0 to 232 – 1 (4,294,967,295).
41
Unsigned Integers
42
From Unsigned to Signed
43
Lecture Plan
• Bits and Bytes
• Hexadecimal
• Integer Representations
• Unsigned Integers
• Signed Integers
• Overflow
44
Signed Integers
A signed integer is a negative integer, 0, or a positive integer.
• Problem: How can we represent negative and positive numbers in binary?
45
Sign Magnitude Representation
0110
positive 6
1011
negative 3
46
Sign Magnitude Representation
0000
🤯
positive 0
1000
negative 0
47
Sign Magnitude Representation
1 000 = -0 0 000 = 0
1 001 = -1 0 001 = 1
1 010 = -2 0 010 = 2
1 011 = -3 0 011 = 3
1 100 = -4 0 100 = 4
1 101 = -5 0 101 = 5
1 110 = -6 0 110 = 6
1 111 = -7 0 111 = 7
48
Sign Magnitude Representation
• Pro: easy to represent, and easy to convert to/from decimal.
• Con: +-0 is not intuitive
• Con: we lose a bit that could be used to store more numbers
• Con: arithmetic is tricky: we need to find the sign, then maybe subtract
(borrow and carry, etc.), then maybe change the sign. This complicates the
hardware support for something as fundamental as addition.
Can we do better?
49
A Better Idea
• Ideally, binary addition would just work regardless of whether the number is
positive or negative.
0101
+????
0000
50
A Better Idea
• Ideally, binary addition would just work regardless of whether the number is
positive or negative.
0101
+1011
0000
51
A Better Idea
• Ideally, binary addition would just work regardless of whether the number is
positive or negative.
0011
+????
0000
52
A Better Idea
• Ideally, binary addition would just work regardless of whether the number is
positive or negative.
0011
+1101
0000
53
A Better Idea
• Ideally, binary addition would just work regardless of whether the number is
positive or negative.
0000
+????
0000
54
A Better Idea
• Ideally, binary addition would just work regardless of whether the number is
positive or negative.
0000
+0000
0000
55
A Better Idea
Decimal Positive Negative Decimal Positive Negative
A binary number plus its inverse is all 1s. Add 1 to this to carry over all 1s and get 0!
0101 1111
+1010 +0001
1111 0000
58
Another Trick
To find the negative equivalent of a number, work right-to-left and write down
all digits through when you reach a 1. Then, invert the rest of the digits.
100100
+??????
000000
59
Another Trick
To find the negative equivalent of a number, work right-to-left and write down
all digits through when you reach a 1. Then, invert the rest of the digits.
100100
+???100
000000
60
Another Trick
To find the negative equivalent of a number, work right-to-left and write down
all digits through when you reach a 1. Then, invert the rest of the digits.
100100
+ 011100
000000
61
Two’s Complement
62
Two’s Complement
• In two’s complement, we represent a
positive number as itself, and its
negative equivalent as the two’s
complement of itself.
• The two’s complement of a number is
the binary digits inverted, plus 1.
• This works to convert from positive to
negative, and back from negative to
positive!
63
History: Two’s complement
• The binary representation was first proposed by John
von Neumann in First Draft of a Report on the EDVAC
(1945)
• That same year, he also invented the merge sort algorithm
65
Two’s Complement
Adding two numbers is just…adding! There is no special case needed for
negatives. E.g. what is 2 + -5?
0010 2
+1011 -5
1101 -3
66
Two’s Complement
Subtracting two numbers is just performing the two’s complement on one of
them and then adding. E.g. 4 – 5 = -1.
0100 4 0100 4
- 0101 5 +1011 -5
1111 -1
67
Practice: Two’s Complement
What are the negative or positive equivalents of the numbers below?
a) -4 (1100)
b) 7 (0111)
c) 3 (0011)
68
Break Time!
69
Lecture Plan
• Bits and Bytes
• Hexadecimal
• Integer Representations
• Unsigned Integers
• Signed Integers
• Overflow
70
Overflow
If you exceed the maximum value of your bit representation, you wrap around
or overflow back to the smallest bit representation.
If you go below the minimum value of your bit representation, you wrap around
or overflow back to the largest bit representation.
73
Overflow
+1
111…111 000…000 +1
111…110 000…001
111…101 000…010
111…100 000…011
… …
100…010 011…101
100…001 011…110
100…000 011…111
+1 74
Overflow
… …
100…010 011…101
100…001 011…110
100…000 011…111
76
Signed Numbers
-1 0
+1
Negative numbers becoming less negative
111…111 000…000
111…110 000…001
… …
Discontinuity
(i.e. increasing)
means overflow
possible here
100…010 011…101
100…001 011…110
100…000 011…111
≈+2billion
≈-2billion 77
Overflow In Practice: PSY
“We saw this coming a couple months ago and updated our systems to
prepare for it” [link] 78
Overflow In Practice: Timestamps
Many systems store timestamps as the number of seconds since Jan. 1, 1970 in
a signed 32-bit integer.
• Problem: the latest timestamp that can be represented this way is 3:14:07 UTC
on Jan. 13 2038!
79
Overflow In Practice: Gandhi
• In the game “Civilization”, each
civilization leader had an
“aggression” rating. Gandhi was
meant to be peaceful, and had a
score of 1.
• If you adopted “democracy”, all
players’ aggression reduced by 2.
Gandhi’s went from 1 to 255!
• Gandhi then became a big fan of
nuclear weapons.
https://kotaku.com/why-gandhi-is-such-an-asshole-in-civilization-1653818245
80
Overflow in Practice:
• Pacman Level 256
• Make sure to reboot Boeing Dreamliners every 248 days
• Comair/Delta airline had to cancel thousands of flights days before Christmas
• Reported vulnerability CVE-2019-3857 in libssh2 may allow a hacker to
remotely execute code
• Donkey Kong Kill Screen
81
Demo Revisited:
Unexpected Behavior
airline.c 82
Recap
• Bits and Bytes Lecture 2 takeaway: computers
• Hexadecimal represent everything in binary.
• Integer Representations We must determine how to
• Unsigned Integers represent our data (e.g., base-10
• Signed Integers numbers) in a binary format so a
• Overflow computer can manipulate it.
There may be limitations to these
representations! (overflow)
84
Practice: Two’s Complement
Fill in the below table: It’s easier to compute
base-10 for positive
numbers, so use two’s
complement first if
char x = ____; char y = -x; negative.
decimal binary decimal binary
1. 0b1111 1100
2. 0b0001 1000
3. 0b0010 0100
4. 0b1101 1111 🤔
85
Practice: Two’s Complement
Fill in the below table: It’s easier to compute
base-10 for positive
numbers, so use two’s
complement first if
char x = ____; char y = -x; negative.
decimal binary decimal binary
1. -4 0b1111 1100 4 0b0000 0100
2. 0b0001 1000
3. 0b0010 0100
4. 0b1101 1111 🤔
86
Practice: Two’s Complement
Fill in the below table: It’s easier to compute
base-10 for positive
numbers, so use two’s
complement first if
char x = ____; char y = -x; negative.
decimal binary decimal binary
1. -4 0b1111 1100 4 0b0000 0100
2. 24 0b0001 1000 -24 0b1110 1000
3. 36 0b0010 0100 -36 0b1101 1100
4. -33 0b1101 1111 33 0b0010 0001
87
Signed vs. Unsigned Integers
15 0 1
14 2
13 3
12 4
11 5
10 6
9 8 7
88
Underspecified question
What is the following base-2 number in
base-10?
0b1101 15 0 1
14 2
13 3
12 4
11 5
10 6
9 8 7
🤔
89
Underspecified question
What is the following base-2 number in
base-10?
0b1101 15 0 1
14 2
If 4-bit signed: -3 13 3
If 4-bit unsigned: 13 12 4
If >4-bit signed or unsigned: 13 11 5
10 6
9 8 7
You need to know the type to determine the
number! (Note by default, numeric constants
in C are signed ints)
90
Overflow
• What is happening here? Assume 4-bit numbers.
0b1101
+ 0b0100 15 0 1
14 2
13 3
12 4
11 5
10 6
9 8 7
🤔
91
Overflow
• What is happening here? Assume 4-bit numbers.
0b1101
+ 0b0100 15 0 1
14 2
13 3
12 4
Signed Unsigned 11 5
10 6
-3 + 4 = 1 13 + 4 = 1 9 8 7
No overflow Overflow
92
Limits and Comparisons
1. What is
the… Largest unsigned? Largest signed? Smallest signed?
char
int
🤔
93
Limits and Comparisons
1. What is
the… Largest unsigned? Largest signed? Smallest signed?
char 28 - 1 = 255 27 – 1 = 127 -27 = -128