number systems (in binary) · add binary numbers just like how you do with decimal numbers but...

32
Number Systems (in Binary)

Upload: others

Post on 15-Apr-2020

9 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Number Systems (in Binary) · Add binary numbers just like how you do with decimal numbers But remember that it’s binary! For example, 1 + 1 = 10 and you have to carry! 01110 Carry

Number Systems (in Binary)

Page 2: Number Systems (in Binary) · Add binary numbers just like how you do with decimal numbers But remember that it’s binary! For example, 1 + 1 = 10 and you have to carry! 01110 Carry

Stored state bits can be interpreted with many different encoding schemes

StateStorage State Manipulations

Computer can do 2 things1) Store state (How do we interpret stored bits?)2)Manipulate state

Page 3: Number Systems (in Binary) · Add binary numbers just like how you do with decimal numbers But remember that it’s binary! For example, 1 + 1 = 10 and you have to carry! 01110 Carry

233 in one slide! The class consists roughly of 4 quarters: (Bolded words are the big ideas of the course, pay attention when you hear these words)1. You will build a simple computer processor

Build and create statemachines with data, control, and indirection2. You will learn how high‐level language code executes on a processor

Time limitations create dependencies in the state of the processor3. You will learn why computers perform the way they do

Physical limitations require locality and indirection in how we access state4. You will learn about hardware mechanisms for parallelism

Locality, dependencies, and indirection on performance enhancing drugs

We will have a SPIMbot contest!

Today we introduce how to interpret state as data

Page 4: Number Systems (in Binary) · Add binary numbers just like how you do with decimal numbers But remember that it’s binary! For example, 1 + 1 = 10 and you have to carry! 01110 Carry

Today’s lecture Representing things with bits N bits gets you 2N representations

Review: Unsigned binary number representation Hexadecimal notation

Binary Addition & Bitwise Logical Operations Every operation has a width

Two’s complement signed binary representation Bitshift operations

Page 5: Number Systems (in Binary) · Add binary numbers just like how you do with decimal numbers But remember that it’s binary! For example, 1 + 1 = 10 and you have to carry! 01110 Carry

Binary representations review

Page 6: Number Systems (in Binary) · Add binary numbers just like how you do with decimal numbers But remember that it’s binary! For example, 1 + 1 = 10 and you have to carry! 01110 Carry

A code maps each fixed-width string of bits to a meaning

This mapping however is rarely stored explicitly Rather it is used when we interpret the bits.

Bit pattern Marine Mammal0100101 Humpback Whale0100110 Leopard Seal0100111 Sea Otter0101000 West Indian Manatee0101001 Bottlenose Dolphin

Page 7: Number Systems (in Binary) · Add binary numbers just like how you do with decimal numbers But remember that it’s binary! For example, 1 + 1 = 10 and you have to carry! 01110 Carry

How many bits to encode N possible things? 1 bit can encode 2 possibilities (0, 1)

1

0

Bits = 1# encodings = 2

Page 8: Number Systems (in Binary) · Add binary numbers just like how you do with decimal numbers But remember that it’s binary! For example, 1 + 1 = 10 and you have to carry! 01110 Carry

Decimal Binary Hex 0 0000 0 1 0001 1 2 0010 2 3 0011 3 4 0100 4 5 0101 5 6 0110 6 7 0111 7 8 1000 8 9 1001 9 10 1010 A 11 1011 B 12 1100 C 13 1101 D 14 1110 E 15 1111 F

Decimal Binary Hex 0 0000 0 1 0001 1 2 0010 2 3 0011 3 4 0100 4 5 0101 5 6 0110 6 7 0111 7 8 1000 8 9 1001 9 10 1010 A 11 1011 B 12 1100 C 13 1101 D 14 1110 E 15 1111 F

Use Hexadecimal (base-16) as a shorthand for binary numbers The hexadecimal system uses 16 digits:

0 1 2 3 4 5 6 7 8 9 A B C D E F

We can write our 32‐bit number:1001 1010 1110 0110 1011 0001 1111 1101

as0x9AE6B1FD (C/Java style)32’h9AE6B1FD (Verilog style)

Fun fact: Hex is frequently used to specify things like 32‐bit IP addresses and 24‐bit colors.

Page 9: Number Systems (in Binary) · Add binary numbers just like how you do with decimal numbers But remember that it’s binary! For example, 1 + 1 = 10 and you have to carry! 01110 Carry

2’s complement representation and binary arithmetic

Page 10: Number Systems (in Binary) · Add binary numbers just like how you do with decimal numbers But remember that it’s binary! For example, 1 + 1 = 10 and you have to carry! 01110 Carry

2N‐1 22 21 20aN‐1 ••• a2 a1 a0

2N‐1aN‐1* 22+ a2* 21+ a1* 20+ a0*

•••

+ •••

Unsigned binary representation represents numbers as a weighted positional notation

Page 11: Number Systems (in Binary) · Add binary numbers just like how you do with decimal numbers But remember that it’s binary! For example, 1 + 1 = 10 and you have to carry! 01110 Carry

The number wheel (4-bit unsigned #’s)

Page 12: Number Systems (in Binary) · Add binary numbers just like how you do with decimal numbers But remember that it’s binary! For example, 1 + 1 = 10 and you have to carry! 01110 Carry

How do we represent negative numbers?

What would be ideal is: If we could use the same algorithm to add signed numbers as we use for unsigned numbersThen our computers wouldn’t need 2 kinds of adders, just 1.

This is achieved using the 2’s complement representation.

Page 13: Number Systems (in Binary) · Add binary numbers just like how you do with decimal numbers But remember that it’s binary! For example, 1 + 1 = 10 and you have to carry! 01110 Carry

‐(2N‐1) 22 21 20aN‐1 ••• a2 a1 a0

‐(2N‐1)aN‐1* 22+ a2* 21+ a1* 20+ a0*

•••

+ •••

2’s complement negates the weight of the most significant bit

Page 14: Number Systems (in Binary) · Add binary numbers just like how you do with decimal numbers But remember that it’s binary! For example, 1 + 1 = 10 and you have to carry! 01110 Carry

The number wheel (4-bit 2’s complement)

Page 15: Number Systems (in Binary) · Add binary numbers just like how you do with decimal numbers But remember that it’s binary! For example, 1 + 1 = 10 and you have to carry! 01110 Carry

Negating Numbers in 2’s Complement To negate a number: Complement each bit and then add 1.

Example: 0100 = +410 (a positive number in 4‐bit two’s complement)

=  (invert all the bits)= ‐410 (and add one)=  (invert all the bits)= +410 (and add one)

Sometimes, people talk about “taking the two’s complement” of a number. This is a confusing phrase, but itusually means to negate some number that’s already in two’s complement format.

Page 16: Number Systems (in Binary) · Add binary numbers just like how you do with decimal numbers But remember that it’s binary! For example, 1 + 1 = 10 and you have to carry! 01110 Carry

Converting 2’s Complement to Decimal Algorithm 1: if negative, negate; then do unsigned binary to decimal

Algorithm 2: Same as with n‐bit unsigned binary

Except, the MSB is worth –(2n‐1)

Example: 

1100 = ‐410 (a negative number in 4‐bit two’s complement)

𝑏 2 𝑏 2

Page 17: Number Systems (in Binary) · Add binary numbers just like how you do with decimal numbers But remember that it’s binary! For example, 1 + 1 = 10 and you have to carry! 01110 Carry

You have always implicitly used zero extension

To subtract 231 and 3, for instance, you can imagine:

231‐ 003228

This works for positive 2’s complement numbers, but not negative ones.

Page 18: Number Systems (in Binary) · Add binary numbers just like how you do with decimal numbers But remember that it’s binary! For example, 1 + 1 = 10 and you have to carry! 01110 Carry

To align negative 2’s complement numbers, you need to extend the sign bitFor example, going from 4‐bit to 8‐bit numbers:0101 (+5) should become 0000 0101 (+5).But 1100 (‐4) should become 1111 1100 (‐4).

Page 19: Number Systems (in Binary) · Add binary numbers just like how you do with decimal numbers But remember that it’s binary! For example, 1 + 1 = 10 and you have to carry! 01110 Carry

Add binary numbers just like how you do with decimal numbers

But remember that it’s binary! For example, 1 + 1 = 10 and you have to carry!

0 1 1 1 0 Carry in0 1 0 1 1 Augend

+ 0 1 1 1 0 Addend1 1 0 0 1 Sum

The initial carry in is implicitly 0

most significantbit, or MSb

least significantbit, or LSb

Page 20: Number Systems (in Binary) · Add binary numbers just like how you do with decimal numbers But remember that it’s binary! For example, 1 + 1 = 10 and you have to carry! 01110 Carry

Binary addition with 2’s Complement You can add two’s complement numbers just as if they are unsigned numbers. Recall, this was the whole reason for this representation

0 1 0 1 1 11+ 1 1 1 0 0 + (‐4)

Page 21: Number Systems (in Binary) · Add binary numbers just like how you do with decimal numbers But remember that it’s binary! For example, 1 + 1 = 10 and you have to carry! 01110 Carry

We can implement subtraction by negating the 2nd input and then adding

0 1 1 0 1 13‐ 0 1 0 1 0 ‐ 10

0 1 1 0 1 13+ 1 0 1 1 0 + (‐10)

Page 22: Number Systems (in Binary) · Add binary numbers just like how you do with decimal numbers But remember that it’s binary! For example, 1 + 1 = 10 and you have to carry! 01110 Carry

Why does this work?

For n‐bit numbers, the negation of B in two’s complement is 2n ‐ B (this is alternative way of negating a 2’s‐complement number).

A ‐ B = A + (‐B)= A + (2n ‐ B)= (A ‐ B) + 2n

If A  B, then (A ‐ B) is a positive number, and 2n represents a carry out of 1. Discarding this carry out is equivalent to subtracting 2n, which leaves us with the desired result (A ‐ B).  If A  B, then (A ‐ B) is a negative number ‐(B – A)  and we have 2n –(B ‐ A). This corresponds to the desired result, (A ‐ B), in two’s complement form.

Page 23: Number Systems (in Binary) · Add binary numbers just like how you do with decimal numbers But remember that it’s binary! For example, 1 + 1 = 10 and you have to carry! 01110 Carry

“Carry-out” is a procedure, “Overflow” is an interpretation

Carry‐outOccurs at every bit‐position

The process of moving larger numbers to higher bit positions

Focuses on bit‐wise operations

Overflow Can only be seen after completing an entire mathematical operationWhen the interpretation of a set of bits does not match the expected value after a mathematical operation Focuses on representational range (i.e., 4 bits represent 0‐15)

Page 24: Number Systems (in Binary) · Add binary numbers just like how you do with decimal numbers But remember that it’s binary! For example, 1 + 1 = 10 and you have to carry! 01110 Carry

The number wheel (4-bit unsigned #’s)

Page 25: Number Systems (in Binary) · Add binary numbers just like how you do with decimal numbers But remember that it’s binary! For example, 1 + 1 = 10 and you have to carry! 01110 Carry

The number wheel (4-bit 2’s complement)

-1-2

-3

-4

-5

-6-7 -8

Page 26: Number Systems (in Binary) · Add binary numbers just like how you do with decimal numbers But remember that it’s binary! For example, 1 + 1 = 10 and you have to carry! 01110 Carry

How can we know if overflow has occurred? The easiest way to detect signed overflow is to look at all of the sign bits. 

Overflow occurs only in the two situations above: If you add two positive numbers and get a negative result. If you add two negative numbers and get a positive result.

Overflow cannot occur if you add a positive number to a negative number.  Do you see why?

01 00 (+4)+ 0 1 0 1 (+5)

1 0 0 1 (‐7)

1 1 0 0 (‐4)+ 1 0 1 1 (‐5)

0 1 1 1 (+7)

Page 27: Number Systems (in Binary) · Add binary numbers just like how you do with decimal numbers But remember that it’s binary! For example, 1 + 1 = 10 and you have to carry! 01110 Carry

Bitshifting

Page 28: Number Systems (in Binary) · Add binary numbers just like how you do with decimal numbers But remember that it’s binary! For example, 1 + 1 = 10 and you have to carry! 01110 Carry

Bit-wise left shift moves bits toward more significant bit positions

top bits disappear...

always left shift in zeros unsigned char f = b << 5;

0 10 10 10 1

00 00011 1(left shift)

Page 29: Number Systems (in Binary) · Add binary numbers just like how you do with decimal numbers But remember that it’s binary! For example, 1 + 1 = 10 and you have to carry! 01110 Carry

Bit-wise right shift considers a variables signedness

bottom bits disappear...

if unsigned, right shift in zeros

unsigned char g = f >> 2;

0 00 0011

00 00011 1

1

(right shift logical)

bottom bits disappear...

if signed, sign extend MSB

unsigned char i = h >> 2;

00011

00 00011 1

1

signed char h = f;

11

(right shift arithmetic)

Note: x >> 1 not the same as x/2 for negative numbers; compare (-3)>>1 with (-3)/2

Page 30: Number Systems (in Binary) · Add binary numbers just like how you do with decimal numbers But remember that it’s binary! For example, 1 + 1 = 10 and you have to carry! 01110 Carry

Bit-shifting has lower precedence than arithmetic but higher than bitwise operators

Precedence Operator DescriptionHigher * / % Multiplication, division, and modulus

+ ‐ Addition and subtraction<< >> Bitwise shifting& ^ | Bitwise logical operators

Lower && || Logical operators

Page 31: Number Systems (in Binary) · Add binary numbers just like how you do with decimal numbers But remember that it’s binary! For example, 1 + 1 = 10 and you have to carry! 01110 Carry

Bit-shifting is useful for extracting bitsWe have the unsigned  8‐bit word:    b7b6b5b4b3b2b1b0 And we want the 8‐bit word:           0 0 0 0 0 b5b4b3 i.e., we want to extract bits 3‐5.

We can do this with bit‐wise logical & shifting operations y = (x >> 3) & 0x7;

x b7b6b5b4b3b2b1b0x >> 3(x >> 3) & 0x7

Page 32: Number Systems (in Binary) · Add binary numbers just like how you do with decimal numbers But remember that it’s binary! For example, 1 + 1 = 10 and you have to carry! 01110 Carry

Useful for merging two bit patternsWe have 2 unsigned  8‐bit words:    a7a6a5a4a3a2a1a0

b7b6b5b4b3b2b1b0 And we want the 8‐bit word:           a7b6a5b4a3b2a1b0