Yra trys skirtingi sveikojo skaičiaus ženklinimo būdai (straipsnis). a: pažymėtas bitas, b: 1 papildymas ir c: 2 papildymas. Pabandykime suprasti, kaip atsirado šie metodai ir kodėl 2 papildymui teikiama pirmenybė prieš kitus.
Kaip žinome, duomenys saugomi bitais. Kaip atmintyje galime išsaugoti sveikąjį skaičių su ženklu? Norėdami išspręsti šią problemą, pirmiausia sukursime naivų sprendimą ir tada kartosime jį, kol turėsime geriausią savo problemos sprendimą.
a) Pažymėtas bitas
Bandant išsaugoti sveikąjį skaičių su ženklu, atrodo akivaizdu palikti kairįjį bitą ženklui ir naudoti likusius bitus, kad iš tikrųjų išsaugotumėte reikšmes. Pavyzdžiui: 4 bitų sistemoje pirmasis bitas iš kairės bus rezervuotas ženklui (0 reiškia teigiamą, o 1 reiškia neigiamą), o kiti 3 bitai bus naudojami reikšmėms saugoti. Panašiai 8 bitų sistemoje pirmasis bitas iš kairės bus naudojamas ženklui, o likę 7 bus naudojami reikšmėms.
ponas Nr. | Dvejetainis vaizdavimas | Dešimtainė reikšmė |
A | 0000 | +0 |
B | 0001 | +1 |
C | 0010 | +2 |
D | 0011 | +3 |
IR | 0100 | +4 |
F | 0101 | +5 |
G | 0110 | +6 |
H | 0111 | +7 |
aš | 1000 | -0 |
J | 1001 | -1 |
K | 1010 m | -2 |
L | 1011 m | -3 |
M | 1100 | -4 |
N | 1101 | -5 |
O | 1110 | -6 |
P | 1111 | -7 |
Naudodami šį metodą, mes sėkmingai galime atvaizduoti sveikąjį skaičių su ženklu. Tačiau atidžiau išanalizavę galime pastebėti šiuos trūkumus:
1) Du nulio atvaizdai:
4 bitų sistemoje turėtume turėti galimybę išsaugoti 16 (24) reikšmių, tačiau nuo +1 iki +7 ir nuo -1 iki -7 yra tik 14 reikšmių. Kur yra likusios dvi vertės? Atidžiai stebėdami lentelę, pamatysime, kad tos dvi reikšmės susilieja į 0. Taigi turime du nulio atvaizdus, tai reiškia, kad vienas atvaizdas +0 ir kitas -0.
Bet ar du 0 atvaizdai kelia didelį susirūpinimą? Tai kas? Vietoj 16 unikalių verčių galime saugoti tik 15 verčių. Mes galime sau leisti sumažinti diapazoną 1, ar ne? Programinės įrangos kūrėjui tai gali nerūpėti, tačiau grandinės dizaineriui gali būti labai nemalonu pirmiausia patikrinti, ar reikšmė yra +0, o tada patikrinti, ar ji yra -0.
2) Pasirašytas plėtinys neveikia neigiamiems skaičiams:
Duomenų dydis sparčiai didėja. Kurį laiką turime išplėsti bitų sistemą, kad galėtume padidinti duomenų, kuriuos galima saugoti, diapazoną. 2014 m. „Gangnam Style“ vaizdo įrašas viršijo „YouTube“ peržiūrų limitą ir privertė „YouTube“ padidinti peržiūrų skaičių nuo 32 bitų iki 64 bitų sveikojo ženklo. Panašiai 32 bitų Unix laikrodis perpildys 2038 m. sausio 19 d., nes įrašo laiką sekundėmis 32 bitų sveikuoju skaičiumi.
Taigi, taip pat svarbu, kad mūsų vaizdavimo sistema būtų lengvai išplečiama, o tai neįmanoma naudojant šią vaizdavimo sistemą.
Dešimtainė | 4 bitų | 5 bitų | 6 bitų |
+2dvejetainės paieškos algoritmai | 0010 | 00010 | 000010 |
+7 | 0111 | 00111 | 000111 |
-2 | 1010 m | 10010 (!= 11010) | 100010 (!= 111010) |
-7 | 1111 | 10111 (!= 11111) | 100111 (!= 111111) |
3) Dvejetainis pridėjimas neveikia:
Pabandykime pridėti du dvejetainius skaičius:
Dvejetainis | Dešimtainė | Dvejetainis | Dešimtainė | Dvejetainis | Dešimtainė | |||
Numeris 1 | 0010 | +2 | 0111 | +7 | 1101 | -5 | ||
Skaičius-2 | 1010 m | -2 | 1010 m | -2 | 0011 | +3 | ||
Dvejetainis pridėjimas | 1100 | -4 | 0001 | +1 | 0000 | +0 | ||
Dešimtainis sudėjimas | +0 | +5 | -2 |
Kodėl čia neveikia paprastas dvejetainis priedas? Priežastis ta, kad ženklo bitas (daugiausia kairėje) nėra įprastas bitas ir nėra tikrojo skaičiaus dalis. Įsivaizduokite situaciją, kai reikia sukurti aparatinės įrangos grandinę, kad būtų ignoruojamas ženklo bitas, kad būtų atliktas papildymas, o tada pridėti ženklo bitą.
Taigi, tai buvo naivus būdas pavaizduoti sveikąjį skaičių. Pagrindinė šio metodo problema yra ta, kad neigiamus skaičius atvaizdavome aukštyn. Jei pakeisime savo žemėlapių sistemą, kad jie būtų iš viršaus į apačią, kai kurios iš aukščiau išvardytų problemų bus išspręstos.
b) 1's Co įgyvendinti
Jei neigiamus skaičius perskirstysime iš viršaus į apačią, gausime tokią dvejetainę lentelę:
Taip ne. | Dvejetainis vaizdavimas | Dešimtainė reikšmė | |
1 papildymas | Pasirašytas bitas | ||
A | 0000 | +0 | +0 |
B | 0001 | +1 | +1 |
C | 0010 | +2 | +2 |
D | 0011 | +3 | +3 |
IR | 0100 | +4 | +4 |
F | 0101 | +5 | +5 |
G | 0110 | +6 | +6 |
H | 0111 | +7 | +7 |
aš | 1000 | -7 | -0 |
J | 1001 | -6 | -1 |
K"kas yra 10 iš 100" | 1010 m | -5 | -2 |
L | 1011 m | -4 | -3 |
M | 1100 | -3 | -4 |
N | 1101 | -2 | -5 |
O | 1110 | -1 | -6 |
P | 1111 | -0 | -7 |
Kaip gauti dvejetainį sveikojo skaičiaus atvaizdavimą 1 komplemento metodu?
- Teigiami skaičiai pateikiami panašiai kaip sveikųjų ženklų metodas
- Neigiami skaičiai pateikiami apverčiant kiekvieną atitinkamo teigiamo skaičiaus bitą (invertavimą galima lengvai atlikti naudojant NOT vartus aparatūros projektavimo metu)
Atidžiai išanalizuokime tai, kad pamatytume, ar pasiekėme tam tikro patobulinimo.
1) Du nulio atvaizdai:
Šiuo požiūriu taip pat turime du nulio atvaizdus.
2) Pasirašytas plėtinys neveikia neigiamiems skaičiams:
Pažymėtas plėtinys puikiai tinka neigiamiems skaičiams.
Dešimtainė | 4 bitų | 5 bitų | 6 bitų |
+2 | 0010 | 00010 | 000010 |
+7 | 0111 | 00111 | 000111 |
-2 | 1101 | 11101 | 111101 |
-7 | 1000 | 11 000 | 111 000 |
3) Dvejetainis pridėjimas veikia su pakeistomis taisyklėmis:
Dvejetainis | Dešimtainė | Dvejetainis | Dešimtainėjava eilutės pakeitimas | Dvejetainis | Dešimtainė | |||
Numeris 1 | 0010 | +2 | 0111 | +7 | 1010 m | -5 | ||
Skaičius-2 | 1101 | -2 | 1101 | -2 | 0011 | +3 | ||
Dvejetainis pridėjimas | 1111 | -0 | 0100 | +4 | 1101 | -2 | ||
Dešimtainis sudėjimas | +0 | +5 | -2 |
Atsakymas ne visada teisingas, bet labai arti teisingo atsakymo. Galime tai padaryti, jei laikysimės šios taisyklės jei sugeneravote perkėlimą kairėje pusėje, neišmeskite jo, o grąžinkite atgal ir pridėkite prie dešiniojo bito.
Dvejetainis | Dešimtainė | Dvejetainis | Dešimtainė | Dvejetainis | Dešimtainė | |||
Numeris 1 | 0111 | +7 | 1110 | -1 | 0111 | +7 | ||
Skaičius-2 | 1101 | -2 | 1001 | -6 | 1011 m | -4 | ||
Dvejetainis pridėjimas | (1) 0100 | +4 | (1) 0111 | +7 | (1) 0010 | +2 | ||
Pridedamas perkėlimas atgal | 0101 | +5 | 1000 | -7 | 0011 | +3 |
Neabejotinai 1 papildymo metodas yra geresnis nei pasirašytas bitas. Mūsų pagrindiniai rūpesčiai išspręsti, bet išlieka problema (turi du nulio atvaizdus), o mūsų įsilaužimas į dvejetainį papildymą suteikia užuominų, kaip pagerinti 1 papildymo metodą. Perfrazuokite tuos sakinius, kad būtų lengviau.
- Turime papildomą nulio atvaizdą, kuris yra nereikalingas
- Pridedant du dvejetainius skaičius, jei turime perkėlimą kairiajame bite, tada prie rezultato turime pridėti +1, t. y. teisingą atsakymą galima rasti pereinant į kitą dvejetainės lentelės eilutę.
Abu jie nurodo, kad pagrindinė problemos priežastis yra papildomas nulio atvaizdavimas. Taigi, pašalinkime šį papildomą nulį ir perkelkime visas neigiamas reikšmes į kitą eilutę (-7 pasislinks iš I -> J, -6 pereis iš J -> K ir tt...)
c) 2 papildymas
Kai pašalinsime -0 iš 1 komplemento lentelės ir visas neigiamas reikšmes perkelsime viena eilute žemiau, gausime tokią lentelę, kuri vadinama 2 papildymu:
Taip ne. | Dvejetainis vaizdavimas | Dešimtainė reikšmė | |||
2 papildymas | 1 papildymas | Pasirašytas bitas | |||
A | 0000 | +0 | +0 | +0 | |
B | 0001 | +1 | +1 | +1 | |
C | 0010 | +2 | +2 | +2 | |
D | 0011 | +3 | +3 | +3 | |
IR | 0100 | +4 | +4 | +4 | |
F | 0101 | +5 | +5 | +5 | |
G | 0110 | +6 | +6 | +6 | |
H | 0111kas yra awt | +7 | +7 | +7 | |
aš | 1000 | -8 | -7 | -0 | |
J | 1001 | -7 | = atvirkštinis 7 + 1 bitas | -6 | -1 |
K | 1010 m | -6 | = atvirkštinis 6 + 1 bitas | -5 | -2 |
L | 1011 m | -5 | = atvirkštinis 5 + 1 bitas | -4 | -3 |
M | 1100 | -4 | = atvirkštinis 4 + 1 bitas | -3 | -4 |
N | 1101 | -3 | = atvirkštinis 3 + 1 bitas | -2 | -5 |
O | 1110 | -2 | = atvirkštinis 2 + 1 bitas | -1 | -6 |
P | 1111 | -1 | = atvirkštinis 1 + 1 bitas | -0 | -7 |
Kaip gauti dvejetainį sveikojo skaičiaus atvaizdavimą 2 komplemento metodu?
- Teigiami skaičiai pateikiami panašiai kaip sveikųjų ženklų metodas
- Neigiami skaičiai pateikiami apverčiant kiekvieną atitinkamo teigiamo skaičiaus bitą, tada pridedant prie jo 1 bitą
1) Vienas nulio pavaizdavimas:
Dabar turime tik vieną nulio atvaizdą ir leidžiame saugoti iš viso 16 unikalių reikšmių (nuo +0 iki +7 ir nuo -1 iki -8).
2) Pažymėtas plėtinys veikia neigiamiems skaičiams:
Pažymėtas plėtinys puikiai tinka neigiamiems skaičiams.
Dešimtainė | 4 bitų | 5 bitų | 6 bitų |
+2 | 0010 | 00010 | 000010 |
+7 | 0111 | 00111 | 000111 |
-2 | 1110 | 11110 | 111110 |
-7 | 1001 | 11001 | 111001 |
3) Dvejetainis pridėjimas:
Dvejetainis | Dešimtainė | Dvejetainis | Dešimtainė | Dvejetainis | Dešimtainė | Dvejetainis | Dešimtainė | ||||
Numeris 1 | 0010 | +2 | 0111 | +7 | 1011 m | -5 | 1111 | -1 | |||
Skaičius-2 | 1110 | -2 | 1110 | -2 | 0011 | +3 | 1010 m | -6 | |||
Atsakymas | 0000 | +0 | 0101 | +5 | 1110 | -2 | 1001 | -7 |
4) Pirmasis bitas yra pasirašytas bitas:
2 komplementas turi tokią gražią savybę, kad pirmasis bitas yra ženklo bitas, nes visas teigiamas prasideda nuo 0, o visas neigiamas nuo 1.
5) Atminties perpildymo patikrinimas:
Papildydami įsitikinome, kad mūsų atsakymas yra diapazone, tačiau kuriant aparatinę įrangą reikia aptikti atminties perpildymą. Aparatūros dizaineriams būtų labai bloga mintis patikrinti dydį, kad užfiksuotų perpildymą. 2 papildymo metodas suteikia labai paprastą būdą aptikti atminties perpildymą. aš f perkelti į pasirašytą bitą nėra lygus atlikti iš pasirašyto bito, tai yra atminties perpildymo atvejis y., jei perkelti į pasirašytą bitą yra 0, bet atlikti yra 1 arba jei perkelti į 1, bet atlikti yra 0, tai yra atminties perpildymo atvejis.
Dvejetainis | Dešimtainė | Dvejetainis | Dešimtainė | Dvejetainis | Dešimtainė | Dvejetainis | Dešimtainė | ||||
Numeris 1 | 1011 m | -5 | 0010 | 2 | 0111 | +7 | 1011 m | -5 | |||
Skaičius-2 | 1100 | -4 | 0110 | 6 | 1110 | -2 | 0011 | 3 | |||
Papildymas | (1) 0111 | (0)1000 | (1)0101 | vietos datos laikas java | (0)1110 | ||||||
nešti pasirašyti bitą | 0 | perpildymas | 1 | perpildymas | 1 | Nr | 0 | Nr | |||
atlikti pasirašyti bitų | 1 | 0 | 1 | 0 |