0% found this document useful (0 votes)
24 views

Lecture 02

This document discusses how computers represent integer numbers in binary, including bits and bytes, hexadecimal, and unsigned and signed integer representations. It also covers overflow and converting between number bases. The document provides context for an assignment to implement programs that manipulate binary representations.

Uploaded by

Zeba Khan
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
24 views

Lecture 02

This document discusses how computers represent integer numbers in binary, including bits and bytes, hexadecimal, and unsigned and signed integer representations. It also covers overflow and converting between number bases. The document provides context for an assignment to implement programs that manipulate binary representations.

Uploaded by

Zeba Khan
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 94

CS107 Lecture 2

Bits and Bytes; Integer Representations

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?

Why is answering this question important?


• Helps us understand the limitations of computer arithmetic (today)
• Shows us how to more efficiently perform arithmetic (next time)
• Shows us how we can encode data more compactly and efficiently (next time)

assign1: implement 3 programs that manipulate binary representations to (1) work


around the limitations of arithmetic with addition, (2) simulate an evolving colony of
cells, and (3) print Unicode text to the terminal.
3
Learning Goals
• Learn about the binary and hexadecimal number systems and how to convert
between number systems
• Understand how positive and negative numbers are represented in binary
• Learn about overflow, why it occurs, and its impacts

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

= 5*1000 + 9*100 + 3*10 + 4*1


13
Base 10

5934
103 102 101 100

14
Base 10

10X:
5934
3 2 1 0

15
Base 2

2X :
1011
3 2 1 0

Digits 0-1 (0 to base-1)

16
Base 2

1011
23 22 21 20

17
Base 2

Most significant bit (MSB) Least significant bit (LSB)

1011
eights fours twos ones

= 1*8 + 0*4 + 1*2 + 1*1 = 1110


18
Base 10 to Base 2
Question: What is 6 in base 2?
• Strategy:
• What is the largest power of 2 ≤ 6? 22=4
• Now, what is the largest power of 2 ≤ 6 – 22? 21=2
• 6 – 22 – 21 = 0!

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.

0110 1010 0011


0-15 0-15 0-15

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.

0-15 0-15 0-15

Each is a base-16 digit!

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)

Binary 11 1100 1010


Hexadecimal 3 C A

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

Base-2: Yes, computers use this,


0b10100101 but not human-readable

Base-16: Easy to convert to Base-2,


0xa5 More “portable” as a human-readable format
(fun fact: a half-byte is called a nibble or nybble)

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…)

• Floating Point Numbers: real numbers. (e,g. 0.1, -12.2, 1.5x1012)

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…)

• Floating Point Numbers: real numbers. (e,g. 0.1, -12.2, 1.5x1012)


Look up IEEE floating point if you’re interested!

36
Number Representations

C Declaration Size (Bytes)


int 4
double 8
float 4
char 1
char * 8
short 2
long 8

37
In The Days Of Yore…

C Declaration Size (Bytes)


int 4
double 8
float 4
char 1
char * 4
short 2
long 4

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

A signed integer is a negative, 0, or positive


integer. How can we represent both negative
and positive numbers in binary?

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?

Idea: let’s reserve the most


significant bit to store the sign.

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

We’ve only represented 15 of our 16 available numbers!

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

0 0000 0000 8 1000 1000

1 0001 1111 9 1001 (same as -7!) NA

2 0010 1110 10 1010 (same as -6!) NA

3 0011 1101 11 1011 (same as -5!) NA

4 0100 1100 12 1100 (same as -4!) NA

5 0101 1011 13 1101 (same as -3!) NA

6 0110 1010 14 1110 (same as -2!) NA

7 0111 1001 15 1111 (same as -1!) NA


56
There Seems Like a Pattern Here…

0101 0011 0000


+1011 +1101 +0000
0000 0000 0000
The negative number is the positive number inverted, plus one!
57
There Seems Like a Pattern Here…

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

• Many early computers used +7 0b0000 0111


sign-magnitude or EDSAC (1949)
-7 0b1111 1000
one’s complement 8-bit one’s complement

• The System/360, developed by IBM in 1964, was


widely popular (had 1024KB memory) and
established two’s complement as the dominant
binary representation of integers
System/360 (1964)
64
Two’s Complement
• Con: more difficult to represent, and
difficult to convert to/from decimal and
between positive and negative.
• Pro: only 1 representation for 0!
• Pro: all bits are used to represent as
many numbers as possible
• Pro: the most significant bit still indicates
the sign of a number.
• Pro: addition works for any combination
of positive and negative!

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!

To think about during the break:


How can what we’ve learned so far about
integer representations help us understand
the behavior of the airline program from the
start of lecture?

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.

0b1111 + 0b1 = 0b0000


0b1111 + 0b10 = 0b0001

If you go below the minimum value of your bit representation, you wrap around
or overflow back to the largest bit representation.

0b0000 - 0b1 = 0b1111


0b0000 - 0b10 = 0b1110
71
Min and Max Integer Values
Size
Type Minimum Maximum
(Bytes)
char 1 -128 127
unsigned char 1 0 255

short 2 -32768 32767


unsigned short 2 0 65535

int 4 -2147483648 2147483647


unsigned int 4 0 4294967295

long 8 -9223372036854775808 9223372036854775807

unsigned long 8 0 18446744073709551615


72
Min and Max Integer Values
In C, there are various constants that represent these minimum and maximum
values: INT_MIN, INT_MAX, UINT_MAX, LONG_MIN, LONG_MAX,
ULONG_MAX, …

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

At which points can overflow occur for


signed and unsigned int? (assume binary values 111…111 000…000
shown are all 32 bits) 111…110 000…001
111…101 000…010
A. Signed and unsigned can both overflow X 000…011
111…100
at points X and Y
B. Signed can overflow only at X, unsigned
only at Y
… …
C. Signed can overflow only at Y, unsigned
only at X
D. Signed can overflow at X and Y, Y
unsigned only at X 011…101
100…010
E. Other 100…001 011…110
100…000 011…111

Key Idea: Overflow means discontinuity 75


Unsigned Integers
≈+4billion 0
111…111 000…000
000…001

More increasing positive numbers


111…110

Increasing positive numbers


111…101 000…010
111…100 Discontinuity 000…011
means overflow
possible here

… …

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

Increasing positive numbers


111…101 000…010
111…100 000…011

… …

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

YouTube: “We never thought a video would be watched in numbers


greater than a 32-bit integer (=2,147,483,647 views), but that was before
we met PSY. "Gangnam Style" has been viewed so many times we had to
upgrade to a 64-bit integer (9,223,372,036,854,775,808)!” [link]

“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)

Next time: How can we manipulate individual bits and bytes?


83
Extra Practice

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

int 232 - 1 = 231 - 1 = -231 =


4294967296 2147483647 -2147483648

These are available as


UCHAR_MAX, INT_MIN,
INT_MAX, etc. in the
<limits.h> header.
94

You might also like