CS64 Lecture2 BinaryArithmeticLecture #2 Ziad Matni Dept. of Computer Science, UCSB Adding this...

37
Binary Arithmetic CS 64: Computer Organization and Design Logic Lecture #2 Ziad Matni Dept. of Computer Science, UCSB

Transcript of CS64 Lecture2 BinaryArithmeticLecture #2 Ziad Matni Dept. of Computer Science, UCSB Adding this...

Page 1: CS64 Lecture2 BinaryArithmeticLecture #2 Ziad Matni Dept. of Computer Science, UCSB Adding this Class • The class is full – I will not be adding more ppl L ... • In C/C++, it’s

BinaryArithmetic

CS64:ComputerOrganizationandDesignLogicLecture#2

ZiadMatni

Dept.ofComputerScience,UCSB

Page 2: CS64 Lecture2 BinaryArithmeticLecture #2 Ziad Matni Dept. of Computer Science, UCSB Adding this Class • The class is full – I will not be adding more ppl L ... • In C/C++, it’s

AddingthisClass

•  Theclassisfull–IwillnotbeaddingmorepplL– Evenifothersdrop

4/5/18 Matni,CS64,Sp18 2

Page 3: CS64 Lecture2 BinaryArithmeticLecture #2 Ziad Matni Dept. of Computer Science, UCSB Adding this Class • The class is full – I will not be adding more ppl L ... • In C/C++, it’s

LectureOutline

•  Reviewofpositionalnotation,binarylogic•  Bitwiseoperations•  Bitshiftoperations•  Two’scomplement•  Additionandsubtractioninbinary•  Multiplicationinbinary

4/5/18 Matni,CS64,Sp18 3

Page 4: CS64 Lecture2 BinaryArithmeticLecture #2 Ziad Matni Dept. of Computer Science, UCSB Adding this Class • The class is full – I will not be adding more ppl L ... • In C/C++, it’s

PositionalNotationinDecimal

4/5/18 Matni,CS64,Sp18 4

Continuing with our example… 642 in base 10 positional notation is:

= 6 x 100 = 600

= 4 x 10 = 40 = 2 x 1 = 2 = 642 in base 10

6x102+4x101+2x100

6 4 2100 10 1

642(base10)=600+40+2

Page 5: CS64 Lecture2 BinaryArithmeticLecture #2 Ziad Matni Dept. of Computer Science, UCSB Adding this Class • The class is full – I will not be adding more ppl L ... • In C/C++, it’s

Whatif“642”isexpressedinthebaseof13?

6 x 132 = 6 x 169 = 1014 + 4 x 131 = 4 x 13 = 52 + 2 x 13º = 2 x 1 = 2

PositionalNotationThisishowyouconvertanybasenumberintodecimal!

4/5/18 Matni,CS64,Sp18 5

6 4 2132 131 130

642(base13)=1014+52+2 =1068(base10)

Page 6: CS64 Lecture2 BinaryArithmeticLecture #2 Ziad Matni Dept. of Computer Science, UCSB Adding this Class • The class is full – I will not be adding more ppl L ... • In C/C++, it’s

PositionalNotationinBinary

4/5/18 Matni,CS64,Sp18 6

11101 in base 2 positional notation is:

1 x 24 = 1 x 16 = 16 + 1 x 23 = 1 x 8 = 8 + 1 x 22 = 1 x 4 = 4 + 0 x 21 = 1 x 2 = 0 + 1 x 20 = 1 x 1 = 1

So, 11101 in base 2 is 16 + 8 + 4+ 0 + 1 = 29 in base 10

Page 7: CS64 Lecture2 BinaryArithmeticLecture #2 Ziad Matni Dept. of Computer Science, UCSB Adding this Class • The class is full – I will not be adding more ppl L ... • In C/C++, it’s

ConvenientTable…HEXADECIMAL BINARY

0 0000

1 0001

2 0010

3 0011

4 0100

5 0101

6 0110

7 0111

8 1000

9 1001

4/5/18 Matni,CS64,Sp18 7

HEXADECIMAL(Decimal)

BINARY

A(10) 1010B(11) 1011C(12) 1100D(13) 1101E(14) 1110F(15) 1111

Page 8: CS64 Lecture2 BinaryArithmeticLecture #2 Ziad Matni Dept. of Computer Science, UCSB Adding this Class • The class is full – I will not be adding more ppl L ... • In C/C++, it’s

AlwaysHelpfultoKnow…N 2N

1 22 43 84 165 326 647 1288 2569 51210 1024=1kilobits

4/5/18 Matni,CS64,Sp18 8

N 2N

11 2048=2kb12 4kb13 8kb14 16kb15 32kb16 64kb17 128kb18 256kb19 512kb20 1024kb=1megabits

N 2N

21 2Mb22 4Mb23 8Mb24 16Mb25 32Mb26 64Mb27 128Mb28 256Mb29 512Mb30 1Gb

Page 9: CS64 Lecture2 BinaryArithmeticLecture #2 Ziad Matni Dept. of Computer Science, UCSB Adding this Class • The class is full – I will not be adding more ppl L ... • In C/C++, it’s

ConvertingBinarytoOctalandHexadecimal

(oranybasethat’sapowerof2)NOTETHEFOLLOWING:•  Binaryis 1bit•  Octalis 3bits•  Hexadecimalis 4bits

•  Usethe“groupthebits”technique– Alwaysstartfromtheleastsignificantdigit– Groupevery3bitstogetherforbinàoct– Groupevery4bitstogetherforbinàhex

4/5/18 Matni,CS64,Sp18 9

Page 10: CS64 Lecture2 BinaryArithmeticLecture #2 Ziad Matni Dept. of Computer Science, UCSB Adding this Class • The class is full – I will not be adding more ppl L ... • In C/C++, it’s

ConvertingBinarytoOctalandHexadecimal

•  Taketheexample:10100110…tooctal:10100110…tohexadecimal:10100110

4/5/18 Matni,CS64,Sp18 10

2 4 6

10 6

246inoctal

A6inhexadecimal

Page 11: CS64 Lecture2 BinaryArithmeticLecture #2 Ziad Matni Dept. of Computer Science, UCSB Adding this Class • The class is full – I will not be adding more ppl L ... • In C/C++, it’s

While (the quotient is not zero) 1.  Divide the decimal number by the new base 2.  Make the remainder the next digit to the left in the answer 3.  Replace the original decimal number with the quotient 4.  Repeat until your quotient is zero

Algorithmforconvertingnumberinbase10tootherbases

ConvertingDecimaltoOtherBases

Example:Whatis98(base10)inbase8?

98/8=12R2

12/8=1R4

1/8=0R1

2414/5/18 Matni,CS64,Sp18 11

Page 12: CS64 Lecture2 BinaryArithmeticLecture #2 Ziad Matni Dept. of Computer Science, UCSB Adding this Class • The class is full – I will not be adding more ppl L ... • In C/C++, it’s

In-ClassExercise:ConvertingDecimalintoBinary&HexConvert54(base10)intobinaryandhex:•  54/2=27R0•  27/2=13R1•  13/2=6R1•  6/2=3R0•  3/2=1R1•  1/2=0R1

54(decimal)=110110(binary)=36(hex)

4/5/18 Matni,CS64,Sp18 12

Sanitycheck:110110=2+4+16+32=54

Page 13: CS64 Lecture2 BinaryArithmeticLecture #2 Ziad Matni Dept. of Computer Science, UCSB Adding this Class • The class is full – I will not be adding more ppl L ... • In C/C++, it’s

BinaryLogicRefresherNOT,AND,OR

X NOTXX

0 11 0

4/5/18 Matni,CS64,Sp18 13

X Y XORYX||YX+Y

0 0 00 1 11 0 11 1 1

X Y XANDYX&&YX.Y

0 0 00 1 01 0 01 1 1

Page 14: CS64 Lecture2 BinaryArithmeticLecture #2 Ziad Matni Dept. of Computer Science, UCSB Adding this Class • The class is full – I will not be adding more ppl L ... • In C/C++, it’s

BinaryLogicRefresherExclusive-OR(XOR)

4/5/18 Matni,CS64,Sp18 14

X Y XXORYXOY

0 0 00 1 11 0 11 1 0

+

Theoutputis“1”onlyiftheinputsareopposite

Page 15: CS64 Lecture2 BinaryArithmeticLecture #2 Ziad Matni Dept. of Computer Science, UCSB Adding this Class • The class is full – I will not be adding more ppl L ... • In C/C++, it’s

BitwiseNOT

•  SimilartologicalNOT(!),exceptitworksonabit-by-bitmanner

•  InC/C++,it’sdenotedbyatilde:~ ~(1001)=0110

4/5/18 Matni,CS64,Sp18 15

Page 16: CS64 Lecture2 BinaryArithmeticLecture #2 Ziad Matni Dept. of Computer Science, UCSB Adding this Class • The class is full – I will not be adding more ppl L ... • In C/C++, it’s

Exercises

•  Sometimeshexadecimalnumbersarewritteninthe0xhhnotation,soforexample: Thehex3Bwouldbewrittenas0x3B

•  Whatis~(0x04)?– Ans:0xFB

•  Whatis~(0xE7)?– Ans:0x18

4/5/18 Matni,CS64,Sp18 16

Page 17: CS64 Lecture2 BinaryArithmeticLecture #2 Ziad Matni Dept. of Computer Science, UCSB Adding this Class • The class is full – I will not be adding more ppl L ... • In C/C++, it’s

BitwiseAND

•  SimilartologicalAND(&&),exceptitworksonabit-by-bitmanner

•  InC/C++,it’sdenotedbyasingleampersand:&(1001&0101)=1001 &0101

=0001

4/5/18 Matni,CS64,Sp18 17

Page 18: CS64 Lecture2 BinaryArithmeticLecture #2 Ziad Matni Dept. of Computer Science, UCSB Adding this Class • The class is full – I will not be adding more ppl L ... • In C/C++, it’s

Exercises

•  Whatis(0xFF)&(0x56)?–  Ans:0x56

•  Whatis(0x0F)&(0x56)?–  Ans:0x06

•  Whatis(0x11)&(0x56)?–  Ans:0x10

•  Notehow&canbeusedasa“masking”function

4/5/18 Matni,CS64,Sp18 18

Page 19: CS64 Lecture2 BinaryArithmeticLecture #2 Ziad Matni Dept. of Computer Science, UCSB Adding this Class • The class is full – I will not be adding more ppl L ... • In C/C++, it’s

BitwiseOR

•  SimilartologicalOR(||),exceptitworksonabit-by-bitmanner

•  InC/C++,it’sdenotedbyasinglepipe:|(1001|0101)=1001 |0101

=1101

4/5/18 Matni,CS64,Sp18 19

Page 20: CS64 Lecture2 BinaryArithmeticLecture #2 Ziad Matni Dept. of Computer Science, UCSB Adding this Class • The class is full – I will not be adding more ppl L ... • In C/C++, it’s

Exercises

•  Whatis(0xFF)|(0x92)?– Ans:0xFF

•  Whatis(0xAA)|(0x55)?– Ans:0xFF

•  Whatis(0xA5)|(0x92)?– Ans:B7

4/5/18 Matni,CS64,Sp18 20

Page 21: CS64 Lecture2 BinaryArithmeticLecture #2 Ziad Matni Dept. of Computer Science, UCSB Adding this Class • The class is full – I will not be adding more ppl L ... • In C/C++, it’s

BitwiseXOR

•  Worksonabit-by-bitmanner

•  InC/C++,it’sdenotedbyasinglecarat:^(1001^0101)=1001 ^0101

=1100

4/5/18 Matni,CS64,Sp18 21

Page 22: CS64 Lecture2 BinaryArithmeticLecture #2 Ziad Matni Dept. of Computer Science, UCSB Adding this Class • The class is full – I will not be adding more ppl L ... • In C/C++, it’s

Exercises

•  Whatis(0xA1)^(0x13)?– Ans:0xB2

•  Whatis(0xFF)^(0x13)?– Ans:0xEC

•  Notehow(1^b)isalways~bandhow(0^b)isalwaysb

4/5/18 Matni,CS64,Sp18 22

Page 23: CS64 Lecture2 BinaryArithmeticLecture #2 Ziad Matni Dept. of Computer Science, UCSB Adding this Class • The class is full – I will not be adding more ppl L ... • In C/C++, it’s

BitShiftLeft

•  MoveallthebitsNpositionstotheleft•  Whatdoyoudothepositionsnowempty?

– YouputinN0s

•  Example:Shift“1001”2positionstotheleft1001<<2=100100

•  Whyisthisusefulasaformofmultiplication?

4/5/18 Matni,CS64,Sp18 23

Page 24: CS64 Lecture2 BinaryArithmeticLecture #2 Ziad Matni Dept. of Computer Science, UCSB Adding this Class • The class is full – I will not be adding more ppl L ... • In C/C++, it’s

MultiplicationbyBitLeftShifting

•  VeeeeryusefulinCPU(ALU)design– Why?

•  Becauseyoudon’thavetodesignamultiplier•  Youjusthavetodesignawayforthebitstoshift

4/5/18 Matni,CS64,Sp18 24

Page 25: CS64 Lecture2 BinaryArithmeticLecture #2 Ziad Matni Dept. of Computer Science, UCSB Adding this Class • The class is full – I will not be adding more ppl L ... • In C/C++, it’s

BitShiftRight•  MoveallthebitsNpositionstotheright,subbing-in

eitherN0sorN1sontheleft•  Takesontwodifferentforms

•  Example:Shift“1001”2positionstotheright1001>>2=either0010or1110

•  Theinformationcarriedinthelast2bitsislost.•  IfShiftLeftdoesmultiplication,

whatdoesShiftRightdo?–  Itdivides,butittruncatestheresult

4/5/18 Matni,CS64,Sp18 25

Page 26: CS64 Lecture2 BinaryArithmeticLecture #2 Ziad Matni Dept. of Computer Science, UCSB Adding this Class • The class is full – I will not be adding more ppl L ... • In C/C++, it’s

TwoFormsofShiftRight

•  Subbing-in0smakessense•  Whataboutsubbing-intheleftmostbitwith1?

•  It’scalled“arithmetic”shiftright:1100(arithmetic)>>1=1110

•  It’susedfortwos-complementpurposes

– What?

4/5/18 Matni,CS64,Sp18 26

Page 27: CS64 Lecture2 BinaryArithmeticLecture #2 Ziad Matni Dept. of Computer Science, UCSB Adding this Class • The class is full – I will not be adding more ppl L ... • In C/C++, it’s

NegativeNumbersinBinary

•  Soweknowthat,forexample,6(10)=110(2)•  Butwhatabout–6(10)???

•  Whatifweaddedonemorebitonthefarlefttodenote“negative”?–  i.e.becomesthenewMSB

•  So:110(+6)becomes1110(–6)•  Butthisleavesalottobedesired

–  Baddesignchoice…4/5/18 Matni,CS64,Sp18 27

Page 28: CS64 Lecture2 BinaryArithmeticLecture #2 Ziad Matni Dept. of Computer Science, UCSB Adding this Class • The class is full – I will not be adding more ppl L ... • In C/C++, it’s

TwosComplementMethod

•  ThisishowTwosComplementfixesthis.•  Let’swriteout-6(10)in2s-Complementbinaryin4bits:

So,–6(10)=1010(2)

4/5/18 Matni,CS64,Sp18 28

011010011010

Firsttaketheunsigned(abs)value(i.e.6)andconverttobinary:

Thennegateit(i.e.doa“NOT”functiononit):Nowadd1:

Page 29: CS64 Lecture2 BinaryArithmeticLecture #2 Ziad Matni Dept. of Computer Science, UCSB Adding this Class • The class is full – I will not be adding more ppl L ... • In C/C++, it’s

Let’sdoitBackwards…BydoingitTHESAMEEXACTWAY!

•  2s-ComplementtoDecimalmethodisthesame!

•  Take1010fromourpreviousexample•  Negateitanditbecomes0101•  Nowadd1toit&itbecomes0110,whichis6(10)

4/5/18 Matni,CS64,Sp18 29

Page 30: CS64 Lecture2 BinaryArithmeticLecture #2 Ziad Matni Dept. of Computer Science, UCSB Adding this Class • The class is full – I will not be adding more ppl L ... • In C/C++, it’s

AnotherViewof2sComplement

4/5/18 Matni,CS64,Sp18 30

NOTE:InTwo’sComplement,ifthenumber’sMSBis“1”,thenthatmeansit’sanegativenumberandifit’s“0”thenthenumberispositive.

Page 31: CS64 Lecture2 BinaryArithmeticLecture #2 Ziad Matni Dept. of Computer Science, UCSB Adding this Class • The class is full – I will not be adding more ppl L ... • In C/C++, it’s

AnotherViewof2sComplement

4/5/18 Matni,CS64,Sp18 31

NOTE:Oppositenumbersshowupassymmetricallyoppositeeachotherinthecircle.

NOTEAGAIN:Whenwetalkof2scomplement,wemustalsomentionthenumberofbitsinvolved

Page 32: CS64 Lecture2 BinaryArithmeticLecture #2 Ziad Matni Dept. of Computer Science, UCSB Adding this Class • The class is full – I will not be adding more ppl L ... • In C/C++, it’s

Ranges

•  Therangerepresentedbynumberofbitsdiffersbetweenpositiveandnegativebinarynumbers

•  GivenNbits,therangerepresentedis:0to

and

4/5/18 Matni,CS64,Sp18 32

+2N–1forpositivenumbers–2N-1to+2N-1–1for2’sComplementnegativenumbers

Page 33: CS64 Lecture2 BinaryArithmeticLecture #2 Ziad Matni Dept. of Computer Science, UCSB Adding this Class • The class is full – I will not be adding more ppl L ... • In C/C++, it’s

Addition•  Wehaveanelementarynotionofaddingsingledigits,along

withanideaofcarryingdigits–  Example:whenadding3to9,weputforward2andcarrythe1

(i.e.tomean12)

•  Wecanbuildonthisnotiontoaddnumberstogetherthataremorethanonedigitlong

•  Example: 123 + 389

4/5/18 Matni,CS64,Sp18 33

11

215

Page 34: CS64 Lecture2 BinaryArithmeticLecture #2 Ziad Matni Dept. of Computer Science, UCSB Adding this Class • The class is full – I will not be adding more ppl L ... • In C/C++, it’s

AdditioninBinary

•  Samemathematicalprincipalapplies

0011+1101

4/5/18 Matni,CS64,Sp18 34

1

00

11

00

3+13

161

1

Page 35: CS64 Lecture2 BinaryArithmeticLecture #2 Ziad Matni Dept. of Computer Science, UCSB Adding this Class • The class is full – I will not be adding more ppl L ... • In C/C++, it’s

Exercises

Implementingan8-bitadder:•  Whatis(0x52)+(0x4B)?

– Ans:0x9D,outputcarrybit=0

•  Whatis(0xCA)+(0x67)?– Ans:0x31,outputcarrybit=1

4/5/18 Matni,CS64,Sp18 35

Page 36: CS64 Lecture2 BinaryArithmeticLecture #2 Ziad Matni Dept. of Computer Science, UCSB Adding this Class • The class is full – I will not be adding more ppl L ... • In C/C++, it’s

YOURTO-DOs

•  Assignment#1– Lookforitovertheweekendontheclasswebsite– LAB#1isonMONDAY!

•  Nextweek,wewilldiscussmoreArithmetictopicsandstartexploringAssemblyLanguage– Doyourreadings!

(again:foundontheclasswebsite)

4/5/18 Matni,CS64,Sp18 36

Page 37: CS64 Lecture2 BinaryArithmeticLecture #2 Ziad Matni Dept. of Computer Science, UCSB Adding this Class • The class is full – I will not be adding more ppl L ... • In C/C++, it’s

4/5/18 Matni,CS64,Sp18 37