TIEP114 Tietokoneen rakenne ja arkkitehtuuri

Lukujärjestelmät - jatkuu

 
 Binäärilukujen yhteenlasku Loogisilla porteilla
  
 Säännöt 1 bittisille luvuille             
                       
1
0
0
1
1
+ 0
+ 1
+ 0
+ 1
0
1
1
10
                       
1
c
0
0
1
1
a
+ 0
+ 1
+ 0
+ 1
+ b
0
0
0
1
0
1
10
cs

Totuustaulu - Puolisummain

                       
1
c
0
0
1
1
a
+ 0
+ 1
+ 0
+ 1
+ b
0
0
0
1
0
1
10
cs
abcs
0000
0101a • b
1001a • b
1110a • b

Totuustaulu Kokosummain

 
11
c[1]c[0]
11
a[1]a[0]
+ 11
+ b[1]b[0]
110
c[1]s[1]s[0]
cinabcouts
00000
00101
01001
01110
10001
10110
11010
11111

Kokosummaimen toteutus

cinabcouts
00000
00101
01001
01110
10001
10110
11010
11111

Negatiivisten lukujen esitys binääriluvuilla

 
 Negatiivisten lukujen esittäminen binääri luvuilla
 
 Eniten merkitsevä bitti (MSB) vastaa etumerkkiä
 
 Yksinkertainen esitystapa esim. (+65)10 = (01000001)2
 ja (11000001)2 = (-65)10. 
 Huonoa: Nollalla kaksi merkintää (0000 = +0 ja 1000 = -0), 
 lisäksi vähennyslaskua ei voi suorittaa muuttamalla se 
 vastaavan negatiivisen luvun yhteenlaskuksi. 
 
 Binary   Decimal
                       Vähennyslasku       
 0111          +7      Dec      Bin     Yht. lasku neg. luvulla
 0110          +6                           111
 0101          +5        7     0111         0111      (+7)
 0100          +4       -5    -0101        +1101     +(-5)
 0011          +3        2     0010        10100       +2
 0010          +2            
 0001          +1
 0000          +0
 1000          -0
 1001          -1      Binäärisen vähennyslasku säännöt
 1010          -2
 1011          -3
 1100          -4
 1101          -5
 1110          -6
 1111          -7

 
 Yhden komplementti  (komplementti tarkoittaa vastalukua)
 
 Negatiivinen luku saadaan positiivisesta luvusta vaihtamalla 
 kaikki bitit vastaluvuikseen esim. (+65)10 = (01000001)2
 ⇒ (10111110)2 (Yhden komplementti) = (-65)10. Nyt vähennyslasku 
 voidaan suorittaa yhteenlaskuna (mutta nollalla vielä 
 kaksi esitysmuotoa).
 
 Binary   Decimal

 0111          +7    Yht. lasku neg. luvulla
 0110          +6         11
 0101          +5         0111      (+7)
 0100          +4        +1010     +(-5)
 0011          +3        10001
 0010          +2        |   Ylivuotobitti lisätään tulokseen
 0001          +1        |       1
 0000          +0        |     0001
 1111          -0        -->  +   1
 1110          -1              0010  =   +2
 1101          -2
 1100          -3
 1011          -4     Ylivuoto bitin lisäyksestä tulee 
 1010          -5     nimeen Yhden komplementti
 1001          -6
 1000          -7

 
 Kahden komplementti
 
 Negatiivinen luku saadaan Yhden komplementti luvusta  
 lisäämällä siihen 1 (mistä nimitys Kahden komplementti). 
 Esim. (+65)10 ⇒ (10111110)2 (Yhden komplementti) + (1)2
 ⇒ (10111111)2 (Kahden komplementti) = (-65)10. 
 Hyötynä Yhden komplementtiin on että nyt on vain yksi 
 esitystapa nollalle, sekä yhteenlaskun yksinkertaistuminen.
 
 Binary   Decimal

 0111          +7    Yht. lasku neg. luvulla
 0110          +6         111
 0101          +5         0111      (+7)
 0100          +4        +1011     +(-5)
 0011          +3        10010
 0010          +2           
 0001          +1   Ylivuotobitti yksinkertaisesti poistetaan     
 0000          +0         
 1111          -1        10010 ⇒ 0010 = +2         
 1110          -2                 
 1101          -3
 1100          -4
 1011          -5     
 1010          -6
 1001          -7
 1000          -8

 Esimerkki 

Aiemmin laskettiin yhteen  A=6510 ja V=8610 ja 
tulokseksi saatiin

(10010111)2 

Tulkitaanpa saatua binäärilukua seuraavasti 

 etumerkittömänä

a) 8-bittisenä desimaalilukuna 10010111 ⇒ (151)10


etumerkillisenä 

b) 8-bittisenä desimaalilukuna 10010111 = (1)0010111  ⇒ (-)2310

jatkuu...
 ... jatkuu
c) yhden koplementti -muodossa, 
käännetään kaikki bitit vastakkaisiksi, 

⇒ (10010111)2  ⇒ (01101000)2 

muutetaan desimaaliluvuksi ja 
muutetaan desimaaliluku negatiiviseksi 
(kompensoidaan aiempi bittien negatoinnin vaikutus)

(01101000)2  ⇒ (104)10 ⇒ (-104)10


d) kahden komplementti -muodossa,
käännetään kaikki bitit vastakkaisiksi, lisätään 1, 

⇒ (10010111)2  ⇒ (01101000)2   
⇒ (01101000)2 + (1)2 =  (01101001)2

muutetaan desimaaliluvuksi ja 
muutetaan desimaaliluku negatiiviseksi 
(kompensoidaan aiempi bittien negatoinnin vaikutus)

 ⇒ (01101001)2 ⇒ (105)10 ⇒ (-105)10