TIEP114 Tietokoneen rakenne ja arkkitehtuuri

Negatiiviset binääriluvut

Negatiivisten lukujen esitys binääriluvuilla

 
 Negatiivisten lukujen esittäminen binääriluvuilla
 
 Eniten merkitsevä bitti (MSB) vastaa etumerkkiä
 
 Yksinkertainen esitystapa esim. (+65)10 = (01000001)2
 ja (11000001)2 = (-65)10. 
 Huonoa: Nollalla kaksi merkintää (00000000 = +0 ja 10000000 = -0), 
 lisäksi vähennyslaskua ei voi suorittaa muuttamalla se 
 vastaavan negatiivisen luvun yhteenlaskuksi. 
 
 Binary   Decimal
                       Vähennyslasku       
 00000111      +7      Dec      Bin     Yht. lasku neg. luvulla
 00000110      +6                                 111
 00000101      +5        7    00000111        00000111      (+7)
 00000100      +4       -5   -00000101       +10000101     +(-5)
 00000011      +3        2    00000010        10001100       +2
 00000010      +2            
 00000001      +1
 00000000      +0
 10000000      -0
 10000001      -1      Binäärisen vähennyslasku säännöt
 10000010      -2
 10000011      -3
 10000100      -4
 10000101      -5
 10000110      -6
 10000111      -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

 00000111      +7    Yht. lasku neg. luvulla
 00000110      +6        1111111
 00000101      +5         00000111      (+7)
 00000100      +4        +11111010     +(-5)
 00000011      +3        100000001
 00000010      +2        |   Ylivuotobitti lisätään tulokseen
 00000001      +1        |           1
 00000000      +0        |     00000001
 11111111      -0        -->  +       1
 11111110      -1              00000010  =   +2
 11111101      -2
 11111100      -3
 11111011      -4     Ylivuoto bitin lisäyksestä tulee 
 11111010      -5     nimeen Yhden komplementti
 11111001      -6
 11111000      -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

 00000111          +7    Yht. lasku neg. luvulla
 00000110          +6    11111111
 00000101          +5     00000111      (+7)
 00000100          +4    +11111011     +(-5)
 00000011          +3    100000010
 00000010          +2           
 00000001          +1   Ylivuotobitti yksinkertaisesti poistetaan     
 00000000          +0         
 11111111          -1        100000010 ⇒ 00000010 = +2         
 11111110          -2
 11111101          -3
 11111100          -4
 11111011          -5     
 11111010          -6
 11111001          -7
 11111000          -8

 Esimerkki binääriluvun tulkitsemisesta 

Jos meillä on alla oleva binääriluku ja ei ole tietoa mitä on tallennettu,
niin binääriluvun tulkinnalle on monia vaihtoehtoja.

(10010111)2 

Tulkitaanpa 8-bittistä binäärilukua seuraavasti 

 etumerkittömänä

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


etumerkillisenä (suora talletustapa) 

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


Pitää siis tietää mitä on tallennettu!