Numeri interi positivi nei calcolatori, tutti i dati sono rappresentati con numeri: ogni lettera ha un numero ogni colore sono tre numeri ogni intensità di suono è un numero i numeri sono rappresentati come sequenze di zeri e uni rappresentazione binaria di solito i numeri si scrivono usando dieci cifre: 0, 1, 2, 3, 4, 5, 6, 7, 8 e 9 in binario, se ne usano solo due: 0 e 1 a parte questo, è lo stesso sistema sequenza dei numeri in decimale: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 metodo: si inizia con le cifre a disposizione (0 9) quando sono finite, si mette 1 all inizio (10 11 ) quando finiscono di nuovo, si passa a 2 (20 21 ) si passa a 30, 31, lo stesso sistema si può usare anche con meno cifre otto cifre sistema usato abbastanza spesso cifre 0, 1, 2, 3, 4, 5, 6 e 7 sequenza con otto cifre cifre 0, 1, 2, 3, 4, 5, 6 e 7 stesso sistema: 1
0 1 2 3 4 5 6 7 10 11 12 13 14 15 16 17 20 21 cambia solo che le cifre non finiscono con 9 ma con 7 sistema con otto cifre 0 1 2 3 4 5 6 7 10 11 12 13 14 15 16 17 20 21 ultima cifra 7 dopo 7 c è 10 stesso metodo: dopo l ultima cifra si mette 1 davanti altri numeri dopo 7 c è 10 poi 11, 12, ecc. dopo 17 c è 20 numeri a tre cifre 0 1 2 3 6 7 10 11 16 17 20 21 66 67 100 101 sempre lo stesso sistema: c, 1c, 2c, 6c, 7c dopo 7c si passa a 10c dopo 77 c è 100 ottale decimale sono sequenze diverse: 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 0 1 2 3 4 5 6 7 10 11 12 13 14 15 16 17 20 21 ma i numeri che devono rappresentare sono gli stessi 11 con otto cifre = 9 con dieci cifre 16 con otto cifre = 14 con dieci cifre ecc. 2
numeri in rappresentazioni diverse la sequenza indica i numeri zero, uno, due, questo a prescindere dal numero di cifre con dieci cifre il centesimo numero è 100 con otto cifre è 144 vari sistemi di uso comune decimale dieci cifre ottale otto cifre binario due cifre sistema binario usato perchè è facile realizzare circuiti che: rappresentano usano cifre binarie, ossia 0 e 1 sequenza in binario stesso sistema: prima le cifre quando finiscono, si introduce una cifra a sinistra con due cifre, dopo 0 e 1 le cifre sono finite 0 1 10 11 tre cifre 0 1 10 11 poi? è finita anche la seconda cifra (dopo 1c non c è 2c) 0 1 10 11 100 101 3
valori dei numeri la sequenza indica sempre i numeri in ordine: 0 zero 1 uno 10 due 11 tre 100 quattro 101 cinque 110 sei... funziona? si devono poter rappresentare tutti i numeri il numero decimale 4231 è il quattromiladuecentotrentunesimo della sequenza (senza contare lo zero) si rappresenta come il quattromiladuecentotrentunesimo della sequenza dei numeri binari (senza contare lo zero) 0 1 primo 10 secondo 11 terzo 100 quarto 101 quinto 1000010000111 quattromiladuecentotrentunesimo la sequenza non finisce mai, prima o poi il numero c è perchè non usare il sistema decimale? è facile dal punto di vista tecnologico realizzare sistemi per memorizzare e manipolare dati rappresentati solo come zeri e uni problema: se i dati sono in decimale, come faccio? il programma della calcolatrice nel calcolatore i dati sono in binario l utente li digita in decimale come funziona? conversioni 4
l utente digita i numeri in decimale il programma li converte in binario il programma li somma in binario il programma converte il risultato in decimale operazioni conversione da decimale a binario e viceversa somme, sottrazioni, ecc. con valori in binario per entrambe le cose: serve la descrizione matematica di questi sistemi uno in prima posizione in ottale, dopo 7 c è 10, 11, 12 questi numeri rappresentano otto, nove, dieci, ecc. 7 sette 10 otto = otto + zero 11 nove = otto + uno 12 dieci = otto + due 13 undici = otto + tre 14 dodici = otto + quattro... quindi: 1 in prima posizione indica 8 due in prima posizione 14 dodici = otto + quattro 15 tredici = otto + cinque 16 quattordici = otto + sei 17 quindici = otto + sette 20 sedici = otto + otto + zero = due otto 21 diciassette = otto + otto + uno = due otto + uno... uno in prima posizione è otto due è sedici posizione in decimale 5
16 è dieci più sei 24 è due per dieci più quattro due cifre, in generale per numeri di due cifre, in decimale: yx = y 10 + x in ottale: yx = y 8 + x tre cifre, in generale decimale zyx = z per cento (10 10) + y per dieci + x ottale zyx = z per sessantaquattro (8 8) più y per otto più x binario zyx = z per quattro (2 2) più y per due più x stesso sistema, con otto o due al posto di dieci base numero usato al posto del dieci binario base=2 ottale base=8 decimale base=10 è il numero di cifre valore di un numero in base b: zyx indica z per base al quadrato più y per base più x più cifre stessa cosa: 6
2315 in base dieci è 2 10 3 + 3 10 2 + 1 10 + 5 73512 in base otto è: 7 8 4 + 3 8 3 + 5 8 2 + 1 8 + 2 101011 in base due è: 1 2 5 + 0 2 4 + 1 2 3 + 0 2 2 + 1 2 + 1 regola generale dato un numero in base qualsiasi: l ultima cifra rappresenta il suo valore normale quella che la precede è il suo valore per la base quella prima il suo valore per la base al quadrato quella ancora prima il suo valore per la base al cubo formula numero c k c k-1 c 1 c 0 base b c k c k-1 c 1 c 0 indica c k b k + c k-1 b k-1 + + c 1 b 1 + c 0 b 0 nota: b 1 =b e b 0 =1 vale per b qualsiasi: dieci, otto, due, sedici, ecc. basta che b>1 sistemi posizionali la cifra 2 significa varie cose a seconda della posizione: in 32 indica due in 21 indica due per dieci in 4254 indica due per cento il valore cambia a seconda della posizione per questo si chiamano sistemi posizionali sistemi non posizionali 7
esempio: numeri romani (I, II, III, IV, ecc.) la prima I in II indica uno la I in IV indica meno uno stessa posizione, valore diverso = sistema non posizionale conversioni passaggio da una base all altra da decimale a binario da binario a decimale da binario a ottale principio della conversione si usa sempre la definizione di numero: c k c k-1 c 1 c 0 indica c k b k + c k-1 b k-1 + + c 1 b 1 + c 0 b 0 il valore della somma deve essere lo stesso anche se si cambia base 2 10 + 1 = 2 8 + 5 = 1 16 + 0 8 + 1 4 + 0 2 + 1 1 quindi 21 in decimale è 25 in ottale e 10101 in binario serve un metodo conversione verso il sistema decimale basta usare la definizione e fare i calcoli esempio (ovvio): conversione da decimale a decimale il valore decimale di 3284 è: 3284 = 3 2 8 4 1000 100 10 1 = 3*1000 + 2*100 + 8*10 + 4*1 deriva dalla definizione 8
conversione da binario stessa formula, ma le cifre si moltiplicano per 1, 2, 4, 8, ecc. il numero binario 10110 vale: 10110 = 1 0 1 1 0 16 8 4 2 1 = 1*16 + 0*8 + 1*4 + 1*2 + 0*1 = 16+4+2 = 22 in decimale: 22 da ottale a decimale si usano le potenze di otto: 1, 8, 64, 512, 4096, ecc. esempio: il numero ottale 42703 in decimale è: 42703 = 4 2 7 0 3 = 4096 512 64 8 1 = 4*4096 + 2*512 + 7*64 + 0*8 + 3*1 = = 17859 in decimale è 17859 altri esempi convertire 101101 da binario a decimale 1 2 5 + 0 2 4 + 1 2 3 + 1 2 2 + 0 2 1 + 1 2 0 = 32 + 0 + 8 + 4 + 0 + 1 = 45 convertire 5720 da ottale a decimale 5 8 3 + 7 8 2 + 2 8 1 + 0 8 0 = 2560 + 448 + 16 + 0 = 3024 altri esempi ancora convertire 43012 da base cinque a decimale 4 5 4 + 3 5 3 + 0 5 2 + 1 5 1 + 2 5 0 = 2500 + 375 + 0 + 5 + 2 = 2882 convertire 6513 da base sette a decimale 6 7 3 + 5 7 2 + 1 7 1 + 3 7 0 = 2058 + 245 + 7 + 3 = 2313 da decimale ad altra base 9
si usa un metodo diverso è sempre basato sulla definizione del valore di un numero usa quoziente e resto sette diviso due=quoziente tre, resto uno divisioni successive per convertire n da decimale a binario: si calcolano quoziente e resto di n diviso due il resto è l ultima cifra binaria il quoziente si divide per due, ottenendo un nuovo quoziente e resto il resto è la penultima cifra binaria il quoziente si divide per due... finisce quando il quoziente è zero esempio di divisioni successive decimale 319 in binario 319 diviso due fa 159 con resto di uno 159 diviso due fa 79 con resto di uno 79 diviso due fa 39 con resto di uno 39 diviso due fa 19 con resto di uno 19 diviso due fa 9 con resto di uno 9 diviso due fa 4 con resto di uno 4 diviso due fa 2 con resto di zero 2 diviso due fa 1 con resto di zero 1 diviso due fa 0 con resto di uno si prendono i resti in ordine inverso (dal fondo alla cima) in binario: 100111111 da decimale a ottale stesso sistema invece di dividere per due si divide per otto conversione di 319 in ottale: 319 diviso otto fa 39 con resto di 7 39 diviso otto fa 4 con resto di 7 4 diviso otto fa 0 con resto di 4 10
resti in ordine inverso: 477 questo è il numero in ottale esercizio numero decimale 6812 convertirlo in binario soluzione 6812 diviso 2 fa 3406 con resto di 0 3406 diviso 2 fa 1703 con resto di 0 1703 diviso 2 fa 851 con resto di 1 851 diviso 2 fa 425 con resto di 1 425 diviso 2 fa 212 con resto di 1 212 diviso 2 fa 106 con resto di 0 106 diviso 2 fa 53 con resto di 0 53 diviso 2 fa 26 con resto di 1 26 diviso 2 fa 13 con resto di 0 13 diviso 2 fa 6 con resto di 1 6 diviso 2 fa 3 con resto di 0 3 diviso 2 fa 1 con resto di 1 1 diviso 2 fa 0 con resto di 1 in binario è 1101010011100 esercizio numero decimale 1209 in base otto soluzione 1209 diviso 8 fa 151 con resto di 1 151 diviso 8 fa 18 con resto di 7 18 diviso 8 fa 2 con resto di 2 2 diviso 8 fa 0 con resto di 2 viene 2271 esercizio numero in base sei 4215, convertirlo in base dieci 11
soluzione era da altra base a dieci basta fare i calcoli 4 6 3 + 2 6 2 + 1 6 1 + 5 6 0 = 864 + 72 + 6 + 5 = 947 esempio Convertire il numero decimale 92341 in base cinque: 92341 diviso 5 fa 18468 con resto di 1 18468 diviso 5 fa 3693 con resto di 3 3693 diviso 5 fa 738 con resto di 3 738 diviso 5 fa 147 con resto di 3 147 diviso 5 fa 29 con resto di 2 29 diviso 5 fa 5 con resto di 4 5 diviso 5 fa 1 con resto di 0 1 diviso 5 fa 0 con resto di 1 viene 10423331 divisioni successive: perchè funziona? punto di partenza: 1. il valore di un numero è dato dal polinomio visto prima 2. le cifre sono comprese fra zero e la base meno uno divisioni successive: dimostrazione (1) numero n da convertire in base b =trovare le cifre c k c k-1 c 1 c 0 in base b per definizione: n = c k b k + c k-1 b k-1 + + c 1 b 1 + c 0 b 0 divisioni successive: dimostrazione (2) n = c k b k + c k-1 b k-1 + + c 1 b 1 + c 0 b 0 si dividono entrambi i membri di questa equazione per b n/b = (c k b k + c k-1 b k-1 + + c 1 b 1 + c 0 b 0 )/b = c k b k-1 + c k-1 b k-2 + + c 1 + c 0 /b 12
divisioni successive: dimostrazione (3) n/b = c k b k-1 + c k-1 b k-2 + + c 1 + c 0 /b c i interi tutto intero tranne c 0 /b c 0 è compreso fra 0 e b-1 divisioni successive: dimostrazione (4) n/b = c k b k-1 + c k-1 b k-2 + + c 1 + c 0 /b c k b k-1 + c k-1 b k-2 + + c 1 è intero c 0 /b è fra 0 (incluso) e 1 (escluso) divisioni successive: dimostrazione (5) n/b = c k b k-1 + c k-1 b k-2 + + c 1 + c 0 /b c 0 /b è la parte frazionaria di n/b c 0 è la parte frazionaria di n/b moltiplicata per b è il resto della divisione n/b non finisce qui divisioni successive: dimostrazione (6) n/b = c k b k-1 + c k-1 b k-2 + + c 1 + c 0 /b il quoziente di n/b è la parte intera della divisione qui: c k b k-1 + c k-1 b k-2 + c 1 per definizione di numero: in base b è c k c k-1 c 1 dividendo si ottiene c 1 come resto, ecc. ecc. basi diverse da dieci esempio: convertire da base cinque a base otto base cinque base dieci base dieci base otto 13
esempio di conversione numero 3421 in base cinque convertirlo in ottale: 1. da base cinque a decimale: 3421 = 3 5 5 5 + 4 5 5 + 2 5 + 1 = 486 2. da decimale 486 a base otto: divisioni successive: 486/8 = 60 con resto di 6, poi 60/8=7 con resto di 4, poi 7/8 vale zero con resto di 7 il numero in ottale è 746 alcune conversioni semplici da base due a otto o viceversa: tre bit = una cifra ottale questo perchè 8 = 2 2 2 per esempio, con sei cifre binarie: d 1 8+d 0 = = c 5 2 2 2 2 2 + c 4 2 2 2 2 + c 3 2 2 2 + c 2 2 2 + c 1 2 + c 0 = (c 5 2 2 + c 4 2 + c 3 ) 8 + (c 2 2 2 + c 1 2 + c 0 ) la prima cifra ottale d 1 è c 5 2 2 + c 4 2 + c 3 la seconda cifra ottale d 2 è c 2 2 2 + c 1 2 + c 0 da binario a ottale in pratica: ogni tre bit sono una cifra ottale 11010111001 = 011 010 111 001 --- --- --- --- 3 2 7 1 = 3271 serviva uno zero davanti per ottenre una terzina da ottale a binario ogni cifra ottale sono tre bit 14
101 010 001 111 010 --- --- --- --- --- 52172 = 5 2 1 7 2 = 101 010 001 111 010 = 101010001111010 conversioni facili, in generale se una delle due basi è potenza n-esima dell altra allora n cifre sono una da binario a esadecimale e viceversa esadecimale = base sedici da binario a esadecimale: 10101111001 = 0101 0111 1001 ---- ---- ---- 5 7 9 = 579 da esadecimale a binario: 0111 1001 0001 ---- ---- ---- 791 = 7 9 1 = 0111 1001 0001 = 011110010001 esadecimale finora: basi minori di dieci il meccanismo funziona anche con basi maggiori esadecimale: sedici cifre servono cifre in più per dieci, undici, si usano A, B, C, D, E ed F successione numeri in esadecimale stesso sistema: prima le cifre, quando finiscono 10, ecc. la successione dei primi numeri espressi in esadecimale: 15
0 zero 1 uno 2 due 3 tre 4 quattro 5 cinque 6 sei 7 sette 8 otto 9 nove A dieci B undici C dodici D tredici E quattordici F quindici 10 sedici 11 diciassette 12 diciotto 13 diciannove 14 venti 15 ventuno... esadecimale: conversioni solito sistema: A2F = 10 16 16 + 2 16 + 15 = 2607 da decimale a esadecimale: 2607/16 = 162 con il resto di 15 l ultima cifra è F si divide 162 per sedici, ecc. conversioni facili 16=2 4 una cifra esadecimale sono quattro bit e viceversa generalizzazione sistema posizionale= numero b, la base b simboli, detti cifre le cifre rappresentano valori da 0 a b-1 16
funzione val(cifra) che dà il valore di ogni cifra esempio di sistema posizionale b=12 cifre: µ þ ø I val( )=0 val( )=1 val( )=2 val( )=3 val( )=4 val( )=5 val(µ)=6 val( )=7 val(þ)=8 val(ø)=9 val(i)=10 val( )=11 conversioni µ in decimale vale: val( ) 12 12 + val(µ) 12 + val( ) = 11 12 12 + 6 12 + 3 = 1659 il numero decimale 1001 si converte così: 1001/12=83 con resto di 5 dato che val( )=5, l ultima cifra è 83/12=6, ecc. viene µ numero e numerale numero un valore numerale la sua rappresentazione 12, XII e dodici sono tre modi diversi per rappresentare lo stesso numero sono quindi tre numerali che rappresentano lo stesso numero addizioni 17
solito modo: 2 7 5 + 1 7 5 4 = --------- 5+4=9 9 7+5=12 (ossia 2 con riporto 1) 1 2 2+7+1=10 (ossia 0 con riporto 1) 1 0 1+1=2 ---------- 2 0 2 9 addizioni con base generica numeri l uno sopra l altro si somma cifra per cifra a partire da destra si mettono i riporti nella somma successiva somma di cifre nella base: 4+5=11 in ottale, ecc. esempio: somma in ottale 5 2 3 + 1 3 6 1 = --------- 3+1=4 4 2+6=otto, in ottale 10 ossia 0 con riporto di 1 1 0 5+3+1=nove, in ottale 11 ossia 1 con riporto di 1 1 1 1+1=2 --------- 2 1 0 4 esempio: somma in binario 1 0 0 1 1 + 1 0 0 1 1 1 = ------------- 1+1=due, in binario 10 ossia 0 con riporto 1 1 0 18
1+1+1=tre, in binario 11 ossia 1 con riporto 1 1 1 0+1+1=due, in binario 10 ossia 0 con riporto 1 1 0 0+0+1=1 1+0=1 1 ------------- 1 1 1 0 1 0 somma con base generica stesso sistema si somma cifra per cifra ma la somma va fatta nella base: 5+3+1=11 in ottale 1+1+1=11 in binario esercizio di somma Sommare i numeri esadecimali 1F2 e BA4 soluzione 1 F 2 + B A 4 = ---------- 2+4=6 6 F+A=quindici+dieci= =venticinque=sedici+nove= 19 in esadecimale (9 con riporto di 1) 1 9 1+B+1=uno+undici+uno=tredici= D in esadecimale ---------- D 9 6 esercizio di somma 19
sommare i numeri in base tre 2201 e 202 soluzione 2 2 0 1 + 2 0 2 = ----------- 1+2=tre=tre+0 in base tre: 10 cioè 0 con riporto di 1 1 0 0+0+1=1 1 2+2=quattro=tre+uno in base tre 11 cioè 1 con riporto di 1 1 1 2+0+1=tre=tre+zero in base tre 10 cioè 0 con riporto di 1 1 0 0+0+1=1 ----------- 1 0 1 1 0 esercizio di somma sommare i numeri binari 11011001 e 11110000111 soluzione 1 1 0 1 1 0 0 1 + 1 1 1 1 0 0 0 0 1 1 1 = ------------------------- 1+1=0 con riporto 1 0+1+1=0 con riporto 1 0+1+1=0 con riporto 1 1+0+1=0 con riporto 1 1+0+1=0 con riporto 1 0+0+1=1 1+0=1 1+1=0 con riporto 1 0+1+1=0 con riporto 1 20
0+1+1=0 con riporto 1 0+1+1=0 con riporto 1 0+0+1=1 ------------------------- 1 0 0 0 0 1 1 0 0 0 0 0 dimostrazione del metodo di somma punti di partenza: 1. due cifre nella stessa posizione sono moltiplicate per la stessa potenza della base 2. la somma di due cifre più uno dà al massimo riporto uno dimostrazione del metodo di somma somma di: risultato: a k-1 a 0 b k-1 b 0 a k-1 b k-1 + + a 0 b 0 + b k-1 b k-1 + + b 0 b 0 = (a k-1 +b k-1 ) b k-1 + + (a 0 +b 0 ) b 0 si possono quindi sommare le cifre dimostrazione del metodo di somma: primo riporto a 0 e b 0 possono andare da 0 a b-1 la somma può superare b-1 (massimo valore per una singola cifra) il massimo è (b-1)+(b-1)=b+(b-2) in base b è 1c dove c è la cifra che rappresenta b-2 l 1 è il riporto dimostrazione del metodo di somma: riporti successivi si sommano due cifre più un eventuale riporto 1 il massimo è (b-1)+(b-1)+1=2b-1=b+(b-1) 21
in base b, è 1d, dove d è la cifra che rappresenta b-1 in qualsiasi base, il riporto può valere al massimo uno dimostrazione per induzione meccanismo usato: per le ultime due cifre, il riporto al massimo vale uno per una posizione generica: assumendo che il riporto precedente sia al massimo uno si dimostra che il riporto generato può valere al massimo uno si assume che il riporto precedente sia massimo uno si dimostra che questo è massiumo uno dimostrazioni in cui si assume un fatto per dimostrarlo in una condizione successiva si dicono dimostrazioni per induzione riporto nel caso binario due bit più un riporto: massimo 1+1+1=11 la singola somma è un addizione di tre bit che produce un risultato a due bit si vedranno circuiti in grado di produrre i due bit a partire da quei tre numero di bit nella maggior parte dei casi pratici, ogni numero si rappresenta con una quantità fissata di bit esempio: 64 il risultato di una somma può avere un bit in più addendi a 64 bit, risultato a 65 (non rappresentabile) aumento numero di bit: esempio addendi a otto bit: 11010001 + 01100001 = ----------- 100110010 risultato a nove 22
non un numero rappresentabile con otto bit overflow condizione in cui: esistono dei valori rappresentabili nel numero prefissato di bit si effettua un operazione che produce un risultato non memorizzabile con quei bit sottrazione stesso metodo della base dieci sottrazione per cifre con eventuale riporto di -1 una sottrazione in decimale 3 2 1-6 2 = --------- 1-2=-1, ossia 9-10 cifra 9 e riporto -1-1 9 2-6-1=-5, ossia 5-10 cifra 5 e riporto -1-1 5 3-1=2 2 --------- 2 5 9 9-10 = risultato è 9, riporto -1 (-10 all ultima cifra = -1 alla penultima, ecc.) una sottrazione in ottale 2 7 1-1 3 6 = --------- 1-6=-5=3-8 cifra 3 e riporto -1-1 3 7-3-1=3 3 2-1=1 1 --------- 1 3 3 23
perchè 3-8? perchè il riporto è -1? riporti nelle sottrazioni in ottale base 8 1-6 viene -5, ma non esiste una cifra per -5 ma -5 è uguale a (-1) 8+3 simile a 1 8+3, che è 13 in ottale (-1) 8+3 è come due cifre -1 e 3-1 è il riporto 3 la cifra del risultato peso delle cifre 2 7 1-1 3 6 = --------- 1-6=-5=3-8 cifra 3 e riporto -1-1 3 7-3-1=3 3 valori delle cifre: c 2 8 8 + c 1 8 + c 0 un -8 all ultima cifra vale -8 il -1 alla penultima vale (-1) 8 il -8 all ultima cifra è -1 alla penultima (-8 all ultima cifra=-1 alla penultima) sottrazione in binario 1 1 0 0 1 0 0-1 0 0 1 0 1 1 = ---------------- 0-1=-1=1-2 ossia 1 con riporto di -1 0-1-1=-2=0-2 ossia 0 con riporto di -1 24
1-0-1=0 0-1=-1=1-2 ossia 1 con riporto di -1 0-0-1=-1=1-2 ossia 1 con riporto di -1 1-0-1=0 1-1=0 ---------------- 0 0 1 1 0 0 1-2 all ultima cifra=-1 alla penultima, ecc. rappresentabilità del risultato sottrazione fra due positivi: minore del primo no overflow possibile il risultato può essere minore di zero =non rappresentabile in questi sistemi per i positivi underflow=valore troppo basso per essere rappresentato moltiplicazione come in decimale: ogni cifra ha un valore che dipende dalla posizione quando si moltiplica il primo per una cifra del secondo, il risultato va allineato alla cifra del secondo moltiplicazione in ottale 412 52 = ------ 1024 412 2 (tenendo conto che 4 2=10) 2462 412 5 (tenendo conto che 5 2=12 e 5 4=24) ------ 25644 somma moltiplicazione in binario 25
ogni cifra può essere solo 0 o 1 primo cifra-del-secondo= il primo, se la cifra è 1 zero, se la cifra è 0 i singoli prodotti o sono il primo operando oppure valgono zero moltiplicazione in binario: esempio 10111 1101 = --------- 10111 10111 1 00000 10111 0 10111 10111 1 10111 10111 1 --------- 100101011 ogni prodotto è zero oppure il primo operando spostato a sinistra shift: translare un numero (detto anche spostamento) shifter: circuiti che realizzano uno shift moltiplicazione per una potenza della base è uguale a uno shift esempio: moltiplicazione per due (10) in binario: 110001 10 = -------- 000000 110010 0 110001 110010 1 -------- 1100010 stesso numero spostato a sinistra di una posizione moltiplicazione per una potenza della base moltiplicare per otto (1000): 26
110001 1000 = ---------- 000000 110010 0 000000 110010 0 000000 110010 0 110001 110010 1 ---------- 110001000 stesso numero spostato a sinistra di tre posizioni moltiplicazione per una potenza della base in generale: n-esima potenza della base=10...0 con n zeri l unico prodotto intermedio è quello generato da 1 è il numero di partenza spostato di n posizioni moltiplicazione per potenze di due è come spostare i bit in Python: a<<b è a spostato di b posizioni è come aggiungere b zeri in fondo print 1<<4 print 5<<2 stampa 16 e 20: print 1<<4 1 con quattro zeri 10000 = 16 print 5<<2 5 = 101 con due zeri 10100 = 16+4 = 20 divisioni per potenze di due spostamento a destra dei bit in Python: a>>b è a spostato a destra di b posizioni i bit che "escono" si perdono massimo numero rappresentabile in hardware, i numeri si rappresentano con un numero prefissato di bit esempio: 64 27
massimo numero senza segno rappresentabile: sessantaquattro uni 1111111111111111111111111111111111111111111111111111111111111111 1 2 63 + 1 2 62 + 1 2 61 + 1 2 60 + 1 2 59 + 1 2 58 + 1 2 57 + 1 2 56 + 1 2 55 + 1 2 54 + 1 2 53 + 1 2 52 + 1 2 51 + 1 2 50 + 1 2 49 + 1 2 48 + 1 2 47 + 1 2 46 + 1 2 45 + 1 2 44 + 1 2 43 + 1 2 42 + 1 2 41 + 1 2 40 + 1 2 39 + 1 2 38 + 1 2 37 + 1 2 36 + 1 2 35 + 1 2 34 + 1 2 33 + 1 2 32 + 1 2 31 + 1 2 30 + 1 2 29 + 1 2 28 + 1 2 27 + 1 2 26 + 1 2 25 + 1 2 24 + 1 2 23 + 1 2 22 + 1 2 21 + 1 2 20 + 1 2 19 + 1 2 18 + 1 2 17 + 1 2 16 + 1 2 15 + 1 2 14 + 1 2 13 + 1 2 12 + 1 2 11 + 1 2 10 + 1 2 9 + 1 2 8 + 1 2 7 + 1 2 6 + 1 2 5 + 1 2 4 + 1 2 3 + 1 2 2 + 1 2 1 + 1 2 0 = 9223372036854775808 + 4611686018427387904 + 2305843009213693952 + 1152921504606846976 + 576460752303423488 + 288230376151711744 + 144115188075855872 + 72057594037927936 + 36028797018963968 + 18014398509481984 + 9007199254740992 + 4503599627370496 + 2251799813685248 + 1125899906842624 + 562949953421312 + 281474976710656 + 140737488355328 + 70368744177664 + 35184372088832 + 17592186044416 + 8796093022208 + 4398046511104 + 2199023255552 + 1099511627776 + 549755813888 + 274877906944 + 137438953472 + 68719476736 + 34359738368 + 17179869184 + 8589934592 + 4294967296 + 2147483648 + 1073741824 + 536870912 + 268435456 + 134217728 + 67108864 + 33554432 + 16777216 + 8388608 + 4194304 + 2097152 + 1048576 + 524288 + 262144 + 131072 + 65536 + 32768 + 16384 + 8192 + 4096 + 2048 + 1024 + 512 + 256 + 128 + 64 + 32 + 16 + 8 + 4 + 2 + 1 = 18446744073709551615 massimo numero con n bit 1 2 n-1 + 1 2 n-2 + + 1 2 1 + 1 2 0 = 2 n -1 il successivo di 11 11 è 100 00 è il primo numero non rappresentabile: 2 n massimo rappresentabile: questo meno uno 64 bit bastano? massimo rappresentabile: 18446744073709551615 esistono applicazioni che usano valori più grandi si possono usare due numeri a 64 bit A e B per rappresentarne uno a 128 la coppia A,B rappresenta A 2 64 + B esercizio 28
Convertire i due numeri decimali 591 e 211 in binario. Effettuare poi la somma in binario. Assumendo sedici bit, controllare se si è verificato l overflow. In caso contrario, riconvertire il risultato in decimale, verificando se il risultato è effettivamente 802. conversione 591 591 diviso 2 fa 295 con resto di 1 295 diviso 2 fa 147 con resto di 1 147 diviso 2 fa 73 con resto di 1 73 diviso 2 fa 36 con resto di 1 36 diviso 2 fa 18 con resto di 0 18 diviso 2 fa 9 con resto di 0 9 diviso 2 fa 4 con resto di 1 4 diviso 2 fa 2 con resto di 0 2 diviso 2 fa 1 con resto di 0 1 diviso 2 fa 0 con resto di 1 resti in ordine inverso: 1001001111 conversione 211 211 diviso 2 fa 105 con resto di 1 105 diviso 2 fa 52 con resto di 1 52 diviso 2 fa 26 con resto di 0 26 diviso 2 fa 13 con resto di 0 13 diviso 2 fa 6 con resto di 1 6 diviso 2 fa 3 con resto di 0 3 diviso 2 fa 1 con resto di 1 1 diviso 2 fa 0 con resto di 1 resti in ordine inverso: 11010011 somma dei due numeri 11 11111 riporti 1001001111 + 11010011 = ------------ 1100100010 rientra in sedici bit no overflow conversione 1100100010 1 2 9 + 1 2 8 + 0 2 7 + 0 2 6 + 1 2 5 + 0 2 4 + 0 2 3 + 0 2 2 + 1 2 1 + 0 2 0 = 512 + 256 + 0 + 0 + 32 + 0 + 0 + 0 + 2 + 0 = 802 29
esercizio Convertire il numero decimale 53 e quello esadecimale F1 in binario. Moltipicare i due numeri binari così ottenuti e convertire il risultato in ottale. conversione 52 52 diviso 2 fa 26 con resto di 0 26 diviso 2 fa 13 con resto di 0 13 diviso 2 fa 6 con resto di 1 6 diviso 2 fa 3 con resto di 0 3 diviso 2 fa 1 con resto di 1 1 diviso 2 fa 0 con resto di 1 resti dall ultimo al primo: 110100 conversione F1 si potrebbe convertire prima in decimale e poi in binario ma: 16 = 2 4 una cifra esadecimale = quattro bit F1 = F 1 = 11110001 ---- ---- 1111 0001 moltiplicazione il primo numero ha bit meno che valgono uno del secondo conviene fare secondo per primo (meno addendi) 11110001 110100 = ---------------- 11110001 11110001 11110001 ---------------- 11000011110100 conversione in ottale conversione a dieci e poi a otto oppure: tre bit = una cifra ottale 30
11000011110100 = 011 000 011 110 100 --- --- --- --- --- 3 0 3 6 4 = 30364 31