Ir trīs dažādi veidi, kā attēlot zīmīgu veselu skaitli (rakstu). a: parakstītais bits, b: 1 papildinājums un c: 2 papildinājums. Mēģināsim saprast, kā šīs metodes ir iegūtas un kāpēc 2. papildinājumam tiek dota priekšroka salīdzinājumā ar citiem.
Kā zināms, dati tiek glabāti bitos. Kā mēs varam saglabāt atmiņā veselus skaitļus ar parakstu? Lai atrisinātu šo problēmu, vispirms mēs izstrādāsim naivu risinājumu un pēc tam atkārtosim to, līdz atradīsim labāko risinājumu savai problēmai.
a) Parakstīts bits
Mēģinot saglabāt veselu skaitli ar zīmi, šķiet pašsaprotami rezervēt kreiso bitu zīmei un izmantot atlikušos bitus, lai faktiski saglabātu vērtības. Piemēram: 4 bitu sistēmā pirmais bits no kreisās puses tiks rezervēts zīmei (0 apzīmē pozitīvu, bet 1 apzīmē negatīvu), un pārējie 3 biti tiks izmantoti vērtību glabāšanai. Līdzīgi 8 bitu sistēmā pirmais bits no kreisās puses tiks izmantots zīmei, bet atlikušie 7 tiks izmantoti vērtībām.
kungs Nr. | Binārais attēlojums | Decimālvērtība |
A | 0000 | +0 |
B | 0001 | +1 |
C | 0010 | +2 |
D | 0011 | +3 |
UN | 0100 | +4 |
F | 0101 | +5 |
G | 0110 | +6 |
H | 0111 | +7 |
es | 1000 | -0 |
Dž | 1001. gads | -1 |
K | 1010. gads | -2 |
L | 1011. gads | -3 |
M | 1100 | -4 |
N | 1101 | -5 |
O | 1110 | -6 |
P | 1111 | -7 |
Izmantojot šo pieeju, mēs varam veiksmīgi attēlot veselu ciparu ar zīmi. Bet, analizējot to rūpīgāk, mēs varam novērot šādus trūkumus:
1) divi nulles attēlojumi:
4 bitu sistēmā mums vajadzētu būt iespējai saglabāt 16 (24) vērtības, bet no +1 līdz +7 un no -1 līdz -7 ir tikai 14 vērtības. Kur ir atlikušās divas vērtības? Uzmanīgi novērojot tabulu, mēs uzzināsim, ka šīs divas vērtības saplūst līdz 0. Tādējādi mums ir divi nulles attēlojumi, tas nozīmē, ka viens attēlojums ir +0 un otrs -0.
Bet vai divi 0 attēlojumi rada lielas bažas? Nu ko? 16 unikālo vērtību vietā mēs varam saglabāt tikai 15 vērtības. Mēs varam atļauties samazināt diapazonu par 1, vai ne? Programmatūras izstrādātājam tas var nebūt bažīgs, taču ķēdes izstrādātājam var būt ļoti nepatīkami vispirms pārbaudīt, vai vērtība ir +0, un pēc tam pārbaudīt, vai tā ir -0.
2) Parakstīts paplašinājums nedarbojas negatīviem skaitļiem:
Datu apjoms strauji pieaug. Kādu laiku mums ir jāpaplašina bitu sistēma, lai mēs varētu palielināt glabājamo datu diapazonu. 2014. gadā Gangnam Style videoklips pārsniedza YouTube skatījumu ierobežojumu, un tas lika YouTube palielināt skatījumu skaitu no 32 bitiem uz 64 bitu veselu skaitli. Līdzīgi 32 bitu Unix pulkstenis pārpildīsies 2038. gada 19. janvārī, jo tas ieraksta laiku sekundēs 32 bitu veselā skaitlī.
Tāpēc vienlīdz svarīgi ir, lai mūsu reprezentācijas sistēma būtu viegli paplašināma, kas nav iespējams ar šo reprezentācijas sistēmu.
Decimālzīme | 4 bitu | 5 bitu | 6 bitu |
+2 | 0010 | 00010 | 000010 |
+7 | 0111 | 00111 | 000111 |
-2 | 1010. gads | 10010 (!= 11010) | 100010 (!= 111010) |
-7 | 1111 | 10111 (!= 11111) | 100111 (!= 111111) |
3) Binārā pievienošana nedarbojas:
Mēģināsim pievienot divus bināros skaitļus:
Binārs | Decimālzīme | Binārs | Decimālzīme | Binārs | Decimālzīme | |||
Skaitlis-1 | 0010 | +2 | 0111 | +7 | 1101 | -5 | ||
Skaitlis-2 | 1010. gads | -2 | 1010. gads | -2 | 0011 | +3 | ||
Binārā pievienošana | 1100 | -4 | 0001 | +1 | 0000 | +0 | ||
Decimāldaļa saskaitīšana | +0 | +5 | -2 |
Kāpēc vienkāršs binārais papildinājums šeit nedarbojas? Iemesls ir tāds, ka zīmes bits (visvairāk pa kreisi) nav parasts bits un nav daļa no faktiskā skaitļa. Iedomājieties situāciju, kad ir jāizstrādā aparatūras shēma, lai ignorētu zīmes bitu, lai veiktu pievienošanu, un pēc tam jāpievieno zīmes bits.
Tātad, tas bija naivs veids, kā attēlot veselu ciparu. Šīs pieejas galvenā problēma ir tā, ka mēs esam kartējuši negatīvos skaitļus uz leju. Ja mēs mainīsim savu kartēšanas sistēmu, lai tās būtu augšā, dažas no iepriekš minētajām problēmām tiks atrisinātas.
b) 1's Co īstenot
Ja mēs pārveidosim savus negatīvos skaitļus no augšas uz leju, mēs iegūsim šādu bināro tabulu:
Jā nē. | Binārais attēlojums | Decimālvērtība | |
1 papildinājums | Parakstīts bits | ||
A | 0000 | +0 | +0 |
B | 0001 | +1 | +1 |
C | 0010 | +2 | +2 |
D | 0011 | +3 | +3 |
UN | 0100 | +4 | +4 |
F | 0101 | +5 | +5 |
G | 0110 | +6 | +6 |
H | 0111 | +7 | +7 |
es | 1000 | -7 | -0 |
Dž | 1001. gads | -6 | -1 |
K | 1010. gads | -5 | -2 |
L | 1011. gads | -4 | -3 |
M | 1100 | -3 | -4 |
N | 1101 | -2 | -5 |
O | 1110 | -1 | -6 |
P | 1111 | -0 | -7 |
Kā iegūt vesela skaitļa bināro attēlojumu 1 komplementa metodē?
- Pozitīvie skaitļi tiek attēloti līdzīgi kā vesela skaitļa metode
- Negatīvie skaitļi tiek attēloti, apgriežot katru atbilstošā pozitīvā skaitļa bitu (invertēšanu var viegli veikt, izmantojot NOT gate aparatūras projektēšanas laikā)
Rūpīgi analizēsim to, lai redzētu, vai esam panākuši kādu uzlabojumu.
1) divi nulles attēlojumi:
Šajā pieejā mums ir arī divi nulles attēlojumi.
2) Parakstīts paplašinājums nedarbojas negatīviem skaitļiem:
Parakstīts paplašinājums lieliski darbojas negatīviem skaitļiem.
Decimālzīme | 4 bitu | 5 bitu | 6 bitu |
+2 | 0010 | 00010 | 000010 |
+7 | 0111 | 00111 | 000111 |
-2 | 1101 | 11101 | 111101 |
-7 | 1000 | 11 000 | 111 000 |
3) Binārā pievienošana darbojas ar modificētiem noteikumiem:
Binārs | Decimālzīme | Binārs | Decimālzīme | Binārs | Decimālzīme | |||
Skaitlis-1 | 0010 | +2 | 0111 | +7 | 1010. gads | -5 | ||
Skaitlis-2 | 1101 | -2 | 1101 | -2 | 0011 | +3 | ||
Binārā pievienošana | 1111 | -0 | 0100 | +4 | 1101 | -2 | ||
Decimāldaļa saskaitīšana | +0 | +5 | -2 |
Atbilde ne vienmēr ir pareiza, taču tā ir ļoti tuvu pareizajai atbildei. Mēs varam panākt, lai tas darbotos, ja ievērosim šo noteikumu ja esat ģenerējis pārnešanu uz priekšu kreisajā pusē, tad neizmetiet to, bet atnesiet to atpakaļ un pievienojiet to labajā malā.
Binārs | Decimālzīme | Binārs | Decimālzīme | Binārs | Decimālzīme | |||
Skaitlis-1 | 0111 | +7 | 1110 | -1 | 0111 | +7 | ||
Skaitlis-2 | 1101 | -2 | 1001. gads | -6 | 1011. gads | -4 | ||
Binārā pievienošana | (1) 0100 | +4 | (1) 0111 | +7 | (1) 0010 | +2 | ||
Tiek pievienota pārnešana atpakaļ | 0101 | +5 | 1000 | -7 | 0011 | +3 |
Noteikti 1 komplementa metode ir labāka par parakstīto bitu. Mūsu galvenās problēmas ir atrisinātas, taču tās joprojām ir problēma (ar diviem nulles attēlojumiem), un mūsu uzlaušana binārajā pievienošanā sniedz norādes, kā uzlabot 1. komplementa metodi. Pārfrāzēsim šos teikumus, lai būtu vieglāk.
- Mums ir papildu nulles attēlojums, kas nav nepieciešams
- Saskaitot divus bināros skaitļus, ja mums ir pārnešana uz priekšu kreisajā lielākajā bitā, tad rezultātam jāpievieno +1, t.i., pareizo atbildi var atrast, pārejot uz nākamo rindu binārajā tabulā.
Abas no tām norāda, ka problēmas galvenais iemesls ir papildu nulles attēlojums. Tātad, noņemsim šo papildu nulli un pārvietosim visas negatīvās vērtības uz nākamo rindu (-7 pārvietosies no I -> J, -6 pārvietosies no J -> K un tā tālāk...)
c) 2. papildinājums
Kad mēs noņemsim -0 no 1 papildinājuma tabulas un nobīdīsim visas negatīvās vērtības vienu rindu zemāk, mēs iegūsim šādu tabulu, ko sauc par 2 papildinājumu:
Jā nē. | Binārais attēlojums | Decimālvērtība | |||
2 papildinājums | 1 papildinājums | Parakstīts bits | |||
A | 0000 | +0 | +0 | +0 | |
B | 0001 | +1 | +1 | +1 | |
C | 0010 | +2 | +2 | +2 | |
D | 0011 | +3 | +3 | +3 | |
UN | 0100 | +4 | +4 | +4 | |
F | 0101 | +5 | +5 | +5 | |
G | 0110 | +6 | +6 | +6 | |
H | 0111 | +7 | +7 | +7 | |
es | 1000 | -8 | -7 | -0 | |
Dž | 1001. gads | -7 | = apgriezts 7 + 1 bits | -6 | -1 |
K | 1010. gads | -6 | = apgriezts 6 + 1 bits | -5 | -2 |
L | 1011. gads | -5 | = apgriezts 5 + 1 bits | -4 | -3 |
M | 1100 | -4 | = apgriezts 4 + 1 bits | -3 | -4 |
N | 1101 | -3 | = apgriezts 3 + 1 bits | -2 | -5 |
O | 1110 | -2 | = apgriezts 2 + 1 bits | -1 | -6 |
P | 1111 | -1 | = apgriezts 1 + 1 bits | -0 | -7 |
Kā iegūt vesela skaitļa bināro attēlojumu 2 komplementa metodē?
- Pozitīvie skaitļi tiek attēloti līdzīgi kā vesela skaitļa metode
- Negatīvie skaitļi tiek attēloti, apgriežot katru atbilstošā pozitīvā skaitļa bitu, pēc tam pievienojot tam 1 bitu
1) Viens nulles attēlojums:
Tagad mums ir tikai viens nulles attēlojums, un tas ļauj mums saglabāt kopā 16 unikālas vērtības (+0 līdz +7 un -1 līdz -8).
2) Parakstīts paplašinājums darbojas negatīviem skaitļiem:
Parakstīts paplašinājums lieliski darbojas negatīviem skaitļiem.
Decimālzīme | 4 bitu | 5 bitu | 6 bitu |
+2 | 0010 | 00010 | 000010 |
+7 | 0111 | 00111 | 000111 |
-2 | 1110 | 11110 | 111110 |
-7 | 1001. gads | 11001 | 111001 |
3) Binārā pievienošana:
Binārs | Decimālzīme | Binārs | Decimālzīme | Binārs | Decimālzīme | Binārs | Decimālzīme | ||||
Skaitlis-1 | 0010 | +2 | 0111 | +7 | 1011. gads | -5 | 1111 | -1 | |||
Skaitlis-2 | 1110 | -2 | 1110 | -2 | 0011 | +3 | 1010. gads | -6 | |||
Atbilde | 0000 | +0 | arp - komanda | 0101 | +5 | 1110 | -2 | 1001. gads | -7 |
4) Pirmais bits ir parakstīts bits:
2 papildinājumam ir šī jaukā īpašība, ka pirmais bits ir zīmes bits, jo viss pozitīvais sākas ar 0, bet viss negatīvais sākas ar 1.
5) Atmiņas pārpildes pārbaude:
Veicot pievienošanu, mēs pārliecinājāmies, ka mūsu atbilde ir diapazonā, taču, izstrādājot aparatūru, ir jānosaka atmiņas pārpilde. Aparatūras dizaineriem būtu ļoti slikta ideja pārbaudīt lielumu, lai noķertu pārplūdi. 2 komplementa metode nodrošina ļoti vienkāršu veidu, kā noteikt atmiņas pārpildīšanu. es f veikt ar parakstīto bitu nav vienāds ar veikt no parakstītā bita, tad tas ir atmiņas pārpildes gadījums t.i., ja pārnesums uz parakstīto bitu ir 0, bet veikts ir 1 vai ja pārnesums 1, bet veikts ir 0, tad runa ir par atmiņas pārpildīšanu.
Binārs | Decimālzīme | Binārs | Decimālzīme | Binārs | Decimālzīme | Binārs | Decimālzīme | ||||
Skaitlis-1 | 1011. gads | -5 | 0010 | 2 | 0111 | +7 | 1011. gads | -5 | |||
Skaitlis-2 | 1100 | -4 | 0110 | 6 | 1110 | -2 | 0011 | 3 | |||
Papildinājums | (1) 0111 | (0)1000 | (1)0101 | (0)1110 | |||||||
ienes parakstīt bitu | 0 | pārplūde | 1 | pārplūde | 1 | Nē | 0 | Nē | |||
veikt, lai parakstītu bitu | 1 | 0 | 1 | 0 |