Kas yra 2 papildiniai?

Studijuoju kompiuterinių sistemų kursus ir iš dalies kovoju su dviem priedais . Noriu tai suprasti, bet viskas, ką aš perskaičiau, nesukėlė man nuotraukos. Aš perskaičiau Vikipedijos straipsnį ir kitus straipsnius, įskaitant mano vadovėlį .

Todėl norėjau pradėti šią bendruomenės wiki, kad nustatytumėte, kas yra du papildymai, kaip jį naudoti ir kaip jis gali paveikti skaičius operacijų, pvz., Liejimo metu (nuo parašo iki nepatvirtinto ir atvirkščiai), bitų operacijų ir bitų keitimo operacijų .

Tikiuosi aiškios ir glaustos apibrėžties , kurią lengvai supranta programuotojas.

381
26 июня '09 в 18:21 2009-06-26 18:21 Frank V yra paprašyta birželio 26 d., 09:18, 2009-06-26 18:21
@ 18 atsakymų

Du papildymai yra protingas būdas išsaugoti sveikuosius skaičius, todėl bendrosios matematikos problemos yra labai paprastos.

Norint suprasti, reikia galvoti apie dvejetainius numerius.

Tai iš esmės sako

  • už nulį naudokite visus 0.
  • teigiamiems sveikiesiems skaičiams pradėkite skaičiuoklę ne daugiau kaip 2 (bitų skaičius yra 1) -1.
  • neigiamiems sveikiesiems skaičiams atlikite tą patį, tačiau pakeiskite 0 ir 1 (todėl vietoj pradžios nuo 0000, pradėkite nuo 1111 - tai yra „papildinio“ dalis).

Pabandykime tai padaryti su 4 bitų mini baitu (vadiname jį kaip susmulkintą - 1/2 baitą).

  • 0000 - nulis
  • 0001 - vienas
  • 0010 - du
  • 0011 - trys
  • 0100 iki 0111 - nuo keturių iki septynių

Tai, kiek mes galime eiti teigiamai. 2 3 -1 = 7.

Negatyvams:

  • 1111 - neigiamas
  • 1110 - du neigiami
  • 1101 - neigiami trys
  • 1100 iki 1000 - nuo keturių iki neigiamų

Atkreipkite dėmesį, kad jūs gaunate vieną papildomą vertę negatyvams ( 1000 = -8), kurių jūs negavote teigiamiems. Taip yra todėl, kad 0000 naudojamas nulis. Tai gali būti laikoma daugybe kompiuterių.

Skirti teigiamus ir neigiamus skaičius

Šiuo atveju pirmasis bitas gauna „ženklo“ bitų vaidmenį, nes jis gali būti naudojamas atskirti teigiamus ir neigiamus dešimtosios vertės. Jei reikšmingiausias bitas yra 1 , tada dvejetainis kodas gali būti vadinamas neigiamu, o jei reikšmingiausias bitas (kairysis) yra 0 , galite pasakyti, kad dešimtainė vertė yra teigiama.

Neigiamų skaičių „vienas komplimentas“ tiesiog apverčia ženklo bitą, o paskui skaičiuojamas nuo 0. Tačiau šis požiūris turi būti susijęs su vertimu 1000 kaip „neigiamą nulį“, kuris yra painus. Paprastai tai reikia tik dėl to, kad dirbate su įranga.

558
26 июня '09 в 18:29 2009-06-26 18:29 atsakymą pateikė lavinio birželio 26 d. , 09:18 , 2009-06-26 18:29

Įdomu, ar tai gali būti geriau paaiškinta nei Vikipedijos straipsnyje.

Pagrindinė problema, kurią bandote išspręsti dviejų papildomų atstovybių pagalba, yra neigiamų sveikųjų skaičių saugojimo problema.

Pirma, apsvarstykite nepasirašytą sveiką skaičių, saugomą 4 bitais. Gali būti:

 0000 = 0 0001 = 1 0010 = 2 ... 1111 = 15 

Jie yra nepasirašyti, nes nėra duomenų, ar jie yra neigiami ar teigiami.

Ženklo dydis ir perviršinis žymėjimas

Norėdami išsaugoti neigiamus skaičius, galite išbandyti keletą dalykų. Pirma, galite naudoti ženklų simbolių žymėjimą, kuris pirmąjį bitą priskiria ženklui bitui, atstovaujančiam +/- ir likusiems bitams, kad būtų rodoma reikšmė. Taigi vėl naudodami 4 bitus ir darant prielaidą, kad 1 reiškia - ir 0 reiškia +, tada jūs turite

 0000 = +0 0001 = +1 0010 = +2 ... 1000 = -0 1001 = -1 1111 = -7 

Taigi jūs matote šią problemą? Turime teigiamą ir neigiamą 0. Didžioji problema yra dvejetainių skaičių pridėjimas ir atėmimas. Schemos, skirtos pridėti ir atimti naudojant pasirašytą vertę, bus labai sudėtingos.

Kas yra?

 0010 1001 + ---- 

?

border=0

Kita sistema yra nereikalingas žymėjimas . Galite saugoti neigiamus skaičius, atsikratyti dviejų nulio problemų, tačiau papildymas ir atėmimas išlieka sudėtingi.

Taigi, yra du papildymai. Dabar galite saugoti teigiamus ir neigiamus sveikuosius skaičius ir atlikti aritmetinį santykinį lengvai. Yra keli būdai konvertuoti numerį į du papildymus. Čia yra vienas.

Konvertuokite dešimtainį kodą į du papildymus

  • Konvertuokite numerį į dvejetainį (nepamirškite dar ženklo), pavyzdžiui, 5 - 0101 ir -5 - 0101

  • Jei skaičius yra teigiamas, tada baigsite. pavyzdžiui, 5 yra 0101 dvejetainiu formatu, naudojant dviejų komponentų žymėjimą.

  • Jei numeris yra neigiamas, tada

    3.1 rasti papildinį (invertuokite 0 ir 1), pvz., -5 yra 0101, todėl suraskite priedą 1010

    3.2 Pridėkite 1, kad pridėtumėte 1010 + 1 = 1011. Todėl, -5 papildomai dviem papildymais yra 1011.

Taigi, ką daryti, jei norite padaryti 2 + (-3) dvejetainiu formatu? 2 + (-3) -1. Ką daryti, jei naudojote ženklo vertę, kad pridėtumėte šiuos skaičius? 0010 + 1101 =?

Naudodami du priedus, pagalvokite apie tai, kaip lengva būtų.

  2 = 0010 -3 = 1101 + ------------- -1 = 1111 

Konvertuokite du priedus į dešimtainę

Konvertuoti 1111 į dešimtainį:

  • Skaičius prasideda nuo 1, taigi jis yra neigiamas, todėl 1111, kuris yra 0000.

  • Pridėti nuo 1 iki 0000 ir mes gauname 0001.

  • Konvertuokite 0001 į dešimtainį, kuris yra 1.

  • Taikyti ženklą = -1.

Tada!

301
26 июня '09 в 18:48 2009-06-26 18:48 atsakymą pateikė Vincent Ramdhanie , birželio 26 d., 09:48, 06:48 2009-06-26 18:48

Kaip ir dauguma paaiškinimų, kuriuos aš mačiau, virš jų yra aiški mintis, kaip dirbti su dviem priedais, bet iš tikrųjų nepaaiškina, ką jie yra matematiškai. Bandysiu tai padaryti bent jau sveikiems skaičiams, o aš kalbėsiu apie kai kurias prielaidas, kurios tikriausiai yra pirmiausia pažįstamos.

Atminkite, kaip jis veikia dešimtainiam skaičiui:
2345
yra rašymo būdas
2 × 10 3 + 3 × 10 2 + 4 × 10 1 + 5 × 10 0 .

Taip pat, dvejetainis kodas yra būdas rašyti numerius, naudojant tik 0 ir 1, vadovaujantis ta pačia bendra idėja, bet pakeičiant tuos 10s aukščiau esančius 2s. Tada dvejetainiais terminais
1111
yra rašymo būdas
1 × 2 3 + 1 × 2 2 + 1 × 2 1 + 1 × 2 0
ir jei tai padarysite, ji bus lygi 15 (10 bazė). Taip yra todėl
8 + 4 + 2 + 1 = 15.

Tai gerai ir naudinga teigiamiems skaičiams. Jis net veikia neigiamus skaičius, jei esate pasirengę tiesiog laikytis minuso ženklo prieš juos, kaip žmonės daro su dešimtainiais skaičiais. Tai galima padaryti net kompiuteriuose, tačiau nuo 1970 m. Aš paliksiu kitos diskusijos priežastis.

Kompiuteriams efektyviau naudoti neigiamų skaičių papildymų vaizdą. Ir čia kažkas dažnai nepastebima. Papildomas žymėjimas apima tam tikrą skaičių skaitmenų pakeitimą, netgi numanant nulius, kurie eina į normalų teigiamą skaičių. Tai yra nepatogu, nes kyla klausimas: ar jie visi? Tai gali būti begalinis skaičius skaitmenų apsvarstyti.

Laimei, kompiuteriai neatstovauja begalybės. Skaičiai yra riboti iki tam tikro ilgio (arba, jei norite, plotis). Todėl grįžkime prie teigiamų dvejetainių skaičių, bet tam tikro dydžio. Šiems pavyzdžiams naudosiu 8 skaitmenis („bitai“). Taigi mūsų dvejetainis skaičius tikrai bus
00001111
arba
0 × 2 7 + 0 × 2 6 + 0 × 2 5 + 0 × 2 4 + 1 × 2 3 + 1 × 2 2 + 1 × 2 1 + 1 × 2 0

Norėdami suformuoti neigiamus 2 priedus, pirmiausia į formą įtraukiame visus (dvejetainius) skaitmenis
11110000
ir pridėkite 1 formą
11110001
bet kaip tai suprantame kaip -15?

Atsakymas yra tai, kad keičiame aukštų užsakymų bitų vertę (kairę). Šis neigiamas skaičius bus 1 . Pakeitimu bus pakeistas jo įnašo ženklas į numerio, kuriame jis rodomas, vertę. Taigi dabar mūsų 11110001 yra suprantamas kaip atstovaujantis
- 1 × 2 7 + 1 × 2 6 + 1 × 2 5 + 1 × 2 4 + 0 × 2 3 + 0 × 2 2 + 0 × 2 1 + 1 × 2 0
Atkreipkite dėmesį į tai, ką anksčiau reiškė? Tai reiškia, kad ženklo bitui priskiriamas -27 svoris, ty -128 (10 bazė). Visos kitos pozicijos turi tokį patį svorį kaip ir dvejetainiai skaičiai be ženklo.

Mūsų -15 vystymasis yra
-128 + 64 + 32 + 16 + 1
Išbandykite jį skaičiuokle. tai -15.

Iš trijų pagrindinių būdų, kuriais mačiau neigiamus skaičius, rodomus kompiuteriuose, 2 papildymai laimėjo rankas patogumui bendram naudojimui. Tačiau tai keista. Kadangi tai yra dvejetainis, turi būti lygus galimų bitų derinių skaičius. Kiekvienas teigiamas skaičius gali būti susietas su neigiamu, bet yra tik vienas nulis. Nulio nulemimas lemia nulį. Taigi yra dar vienas derinys, skaičius su 1 ženklu ir 0 - visai kitai. Atitinkamas teigiamas skaičius neatitiks naudojamų bitų skaičiaus.

Šiuo klausimu netgi nepažįstamas dalykas yra tai, kad jei bandysite sukurti savo teigiamą, papildantį ir pridedantį, jūs gausite tą patį neigiamą skaičių. Atrodo natūralu, kad nulis tai padarys, bet tai yra netikėta, o ne visais elgesiais, su kuriais mes esame įpratę, nes kompiuteriai yra nepagrįsti, mes paprastai galvojame apie neribotą skaičių skaičių, o ne fiksuoto ilgio aritmetiką.

Panašu, kad jis yra keistai ledkalnio viršūnė. Po paviršiumi žemiau paviršiaus vis dar guli, bet to pakanka diskusijoms. Tikriausiai galite rasti daugiau, jei ištirsite „perpildymą“ fiksuoto taško aritmetikai. Jei tikrai norite ją įvesti, taip pat galite mokytis „modulinės aritmetikos“.

111
18 авг. Atsakymas pateikiamas Fordummies 18 rug . 2012-08-18 23:39 '12 11:39 2012-08-18 23:39

2 papildymas yra labai naudingas nustatant dvejetainio failo vertę, bet aš maniau apie daug glaustesnį būdą išspręsti šią problemą (niekada nemačiau, kad jis jį paskelbtų):

imtis dvejetainio kodo, pavyzdžiui: 1101, kuris [daroma prielaida, kad erdvė "1" yra ženklas] yra lygi -3 .

naudojant 2 papildymus, mes tai padarytume ... flip 1101 - 0010 ... add 0001 + 0010 ===> suteikia mums 0011. 0011 teigiamoje binarinėje = ​​3. todėl 1101 = -3 !

Ką supratau:

vietoj tiesiog skambinimo ir pridėjimo, galite tiesiog padaryti pagrindinį teigiamo dvejetainio sprendimo būdą (pvz., 0101): (2 3 * 0) + (2 2 * 1) + (2 1 * 0) + (2 0 * 1) = 5.

Padarykite tiksliai tą pačią koncepciją su neigiamu! (su nedideliu pasukimu)

imtis 1101, pavyzdžiui:

už pirmąjį skaičių vietoj 2 3 * 1 = 8 , atlikite - (2 3 * 1) = - 8 .

tada toliau, kaip įprasta, vykdymas -8 + (2 2 * 1) + (2 1 * 0) + (2 0 * 1) = -3

18
22 июня '13 в 22:47 2013-06-22 22:47 atsakymą davė Simonas Jundovas birželio 22 d., 13 val. 10:47 2013-06-14 22:47

Įsivaizduokite, kad turite ribotą skaičių bitų / kvadratinių / skaičių / bet kokių. Jūs nustatote 0, nes visi skaitmenys yra 0 ir natūraliai skaičiuojami:

 00 01 02 .. 

Galų gale jūs būsite priblokšti.

 98 99 00 

Turime du numerius ir galime atstovauti visus numerius nuo 0 iki 100. Visi šie skaičiai yra teigiami! Tarkime, mes taip pat norime atstovauti neigiamus skaičius?

Mes tikrai turime ciklą. Numeris iki 2 yra 1. Skaičius iki 1 yra skaičius.

Taigi, dėl paprastumo, tarkime, kad bet kuris skaičius virš 50 yra neigiamas. "0" - "49" - nuo 0 iki 49. "99" yra -1, "98" yra -2, ... "50" yra -50.

Šis pristatymas yra dešimt papildymų . Paprastai kompiuteriai naudoja du priedus , kurie yra tokie patys, išskyrus bitų naudojimą vietoj numerių.

Gražus dalykas apie dešimt priedų yra tai, kad priedas veikia. Jums nereikia nieko daryti, kad pridėtumėte teigiamų ir neigiamų skaičių!

14
26 июня '09 в 22:04 2009-06-26 22:04 atsakymą pateikė Captain Segfault birželio 26 d., 09:04 , 2009-06-26 22:04

Nustatomi du papildymai, pridedant vieną prie nurodyto skaičiaus 1 papildymo. Tarkime, turime rasti du priedus 10101 , tada surasti jo papildymą, ty 01010 pridėti 1 prie šio rezultato, ty 01010+1=01011 , kuris yra galutinis atsakymas.

5
13 сент. atsakymas suteiktas 13 sep . 2010-09-13 16:59 '10, 16:59, 2010-09-13 16:59

Leidžia gauti 10-12 atsakymą dvejetainėje formoje, naudojant 8 bitus: mes tikrai tai darome 10 + (-12)

Turime gauti dalį komplimento iš 12, kad būtų atimta iš 10. 12 dvejetainiu formatu yra 00001100. 10 dvejetainiu formatu yra 00001010.

Norėdami gauti dalį 12 komplimento, mes paprasčiausiai atšaukiame visus bitus, o po to pridedame 1.12 binarinėje atvirkštinėje - 11110011. Tai taip pat yra atvirkštinis kodas (vienas papildymas). Dabar turime pridėti vieną, kuri dabar yra 11110100.

Taigi, 11110100 yra komplimentas 12! Tai lengva, kai galvojate apie tai taip.

Dabar galite išspręsti pirmiau pateiktą klausimą 10-12 dvejetainiu pavidalu.

 00001010 11110100 ----------------- 11111110 
4
28 авг. atsakymas pateikiamas „ NightSkyCode“ 28 rug. 2013-08-28 22:23 '13, 22:23 pm 2013-08-28 22:23

Daugelis atsakymų vis dar gerai paaiškina, kodėl du papildiniai naudojami neigiamam skaičiui reprezentuoti, tačiau nesakykite mums, kas yra du papildomi numeriai, ypač ne tai, kodėl „1“ pridedamas, bet dažnai pridedamas neteisingas kelias.

Sumišimas kyla dėl prasto supratimo apie papildomo numerio apibrėžimą. Papildomas papildymas yra trūkstama dalis, kuri padarys kažką užbaigtą.

Skaičių x skaičiaus spindulys-b spinduliu b yra pagal apibrėžimą b ^ nx. Binarinėje išraiška 4 yra 100, kuri turi 3 skaitmenis (n = 3) ir 2 spindulys (b = 2). Taigi, jo spindulio komplementas yra b ^ nx = 2 ^ 3-4 = 8-4 = 4 (arba 100 binarine forma).

Tačiau dvejetainiame vaizde spindulio pridėjimas nėra toks paprastas, kaip ir sumažinto radikso papildymas, kuris yra apibrėžiamas kaip (b ^ n-1) -y, tik 1 mažesnis nei radix papildymas. Jei norite gauti mažesnį radix priedą, paprasčiausiai apverskite visus numerius.

100 → 011 (sumažintas (vienas) spindulys)

norėdami gauti papildomą „radix“ (du), mes tiesiog pridėjome 1, nes apibrėžimas yra apibrėžtas.

011 +1 → 100 (du papildymai).

Dabar su šiuo nauju supratimu pažvelkime Vincento Ramdhano pateiktą pavyzdį (žr. Virš antras atsakymas)

/ * Vincento pradžia

Konvertuoti 1111 į dešimtainį:

Skaičius prasideda nuo 1, taigi jis yra neigiamas, todėl mes surandame papildymą 1111, kuris yra 0000. Pridėti 1 iki 0000, ir mes gauname 0001. Konvertuoti 0001 į dešimtainį, kuris yra 1. Taikyti ženklą = -1. Tada!

Vincento pabaiga * /

Tai turėtų būti suprantama kaip

Numeris prasideda 1, todėl jis yra neigiamas. Taigi, žinome, kad tai yra du papildymai kai kurioms x reikšmėms. Norėdami rasti x, pateiktą dviejų papildymų, pirmiausia turime surasti 1 papildymą.

du papildymai x: 1111 vienas prie x: 1111-1 → 1110; x = 0001, (pasukite visus numerius)

naudokite - ženklą ir atsakymą = -x = -1.

3
14 окт. vartotojo779764 atsakymas spalio 14 d 2016-10-14 22:06 '16 at 22:06 pm 2016-10-14 22:06

Žvelgiant į dvi papildymo sistemas matematiniu požiūriu, tai tikrai yra prasminga. Dešimt papildymų idėja yra iš esmės atskirti skirtumą.

Pavyzdys: 63 - 24 = x

Pridėkite 24 papildymą, kuris iš tikrųjų yra teisingas (100 - 24). Taigi, viskas, ką darome, yra pridėti 100 bet kurioje pusėje lygties.

Dabar lygtis yra 100 + 63 - 24 = x + 100, todėl pašaliname 100 (arba 10 arba 1000 ar kažką kito).

Dėl nepatogios padėties, kurią sudaro vienas numeris iš ilgos nulio grandinės, mes naudojame sistemą su sumažintu radialiniu papildymu, dešimtainėje sistemoje - devyni papildymai.

Kai mums priskiriamas numeris, atimamas iš didelės grandinių grandinės, mums reikia tiesiog atšaukti numerius.

Pavyzdys: 99999 - 03275 = 96724

Štai kodėl po devynių papildymų mes pridėjome 1. Kaip jūs tikriausiai žinote iš vaikų matematikos, 9 tampa 10 „vagystėmis“ 1. Taigi, iš esmės tai yra tik dešimt papildymų, kurių 1 iš skirtumo.

Binarinėje išraiškoje du papildymai yra lygūs dešimčiai papildymų ir vienas papildymas prie devynių papildymų. Pagrindinis skirtumas yra tas, kad užuot bandę izoliuoti skirtumą su dešimties galių (pridedant 10, 100 ir tt), stengiamės atskirti skirtumą su dviejų galių.

Būtent dėl ​​šios priežasties mes invertuojame bitus. Lygiai taip pat, kaip ir mūsų dešimtainio skaičiaus dešimtainio skaičiaus eilutė, mūsų minuend yra dvejetainė eilutė.

Pavyzdys: 111111-101001 = 010110

Kadangi vienetų grandinės yra 1 žemiau malonaus dviejų laipsnių, jos „pavogia“ 1 skirtumą, pvz., Devynis, dešimtainiu pavidalu.

Kai mes naudojame neigiamus dvejetainius numerius, mes tikrai sakome:

0000 - 0101 = x

1111-0101 = 1010

1111 + 0000 - 0101 = x + 1111

Norint „izoliuoti“ x, turime pridėti 1, nes 1111 yra vienas iš 10 000, ir mes pašaliname 1 laidą, nes mes tiesiog pridėjome jį prie pradinio skirtumo.

1111 + 1 + 0000 - 0101 = x + 1111 + 1

10 000 + 0000 - 0101 = x + 10 000

Tiesiog ištrinkite 10 000 abiejose pusėse, kad gautumėte x, tai yra pagrindinė algebra.

3
26 авг. Atsakymas suteiktas „ KyBrooks“ 26 d. 2015-08-26 06:50 '15 at 6:50 am 2015-08-26 06:50

Tai protinga priemonė, koduojanti neigiamus sveikuosius skaičius tokiu būdu, kad maždaug pusė duomenų tipo bitų derinio yra rezervuota neigiamiems sveikiesiems skaičiams, o daugelio neigiamų sveikųjų skaičių su jų atitinkamais teigiamais sveikais skaičiais pridėjimas sukelia perteklių, kuris palieka dvejetainį rezultatą.

Taigi, 2 papildymuose, jei vienas lygus 0x0001, tada -1 lygus 0x1111, nes tai sukels bendrą sumą 0x0000 (su 1 perpildymu).

2
20 июня '12 в 12:10 2012-06-20 12:10 atsakymą pateikė Edwin Buck birželio 20 d. 12:10 2012-06-20 12:10

2s papildymai: kai pridedame papildomą numerį su 1 papildymu, mes gauname 2s papildymus. Pavyzdžiui: 100101 komplementas 1s yra 011010, o papildymas 2s yra 011010 + 1 = 011011 (pridedant vieną su 1 papildymu). Daugiau ... šiame straipsnyje tai paaiškinama grafiškai.

2
26 нояб. Atsakymą pateikė Milonas lapkričio 26 d. 2014-11-26 12:29 '14, 12:29 2014-11-26 12:29

Prieš kelias savaites turėjau tą pačią problemą. Baigiau skaityti apie tai internete iš įvairių šaltinių, bandydamas rinkti šiuos kūrinius ir apie tai rašyti, kad įsitikintumėte, jog teisingai supratau. Mes naudojame du priedus dėl dviejų priežasčių:

  • Norėdami išvengti keleto vaizdų peržiūros 0
  • Kad išvengtumėte nešiojamų bitų (kaip vienas priedas) stebėjimo perpildymo atveju.
  • Paprasta operacija, pvz., Papildymas ir atėmimas, tampa lengva.

Jei norite išsamesnio šio klausimo paaiškinimo, pabandykite čia parašytą straipsnį. Tikiuosi, kad tai padės!

1
16 окт. Atsakymas pateikiamas KN Bhargav 16 okt. 2017-10-16 22:57 '17, 10:57 pm 2017-10-16 22:57

Aš perskaičiau fantastinį „Reddit “ paaiškinimą, naudodamas odometrą kaip analogiją.

Tai naudingas susitarimas. Те же схемы и логические операции, которые добавляют/вычитают положительные числа в двоичном файле, по-прежнему работают как с положительным, так и отрицательным числом, если использовать соглашение, почему он так полезен и вездесущ.