TIEP114 Tietokoneen rakenne ja arkkitehtuuri
Negatiiviset binääriluvut
Negatiivisten lukujen esitys binääriluvuilla
- Tähän asti ollaan käsitelty positiivisia lukuja
- Esim. c# (unsigned) byte
- Seuraavaksi tutkitaan negatiivisille luvuille binääriesityksiä
- Esim. c# (signed) byte
- Eri ohjelmointikielissä määritykset voivat olla erilaiset Esim. Java byte
- Useita eri tapoja määritellä negatiivisten lukujen esitystapa, käydään läpi:
- Eniten merkitsevä bitti (MSB) vastaa etumerkkiä
- Yhden komplementti
- Kahden komplementti
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!