logo

Co je doplněk 2s v C?

Doplněk 2s v C je generován z doplňku 1 v C. Jak víme, že doplněk 1s binárního čísla je vytvořen transformací bitu 1 na 0 a 0 na 1; 2s doplněk binárního čísla je generován přidáním jedničky k 1s doplňku binárního čísla.

Stručně lze říci, že doplněk 2s v C je definován jako součet jedničkového doplňku v C a jedničky.

Doplněk 2s v C

Na obrázku výše je binární číslo rovno 00010100 a jeho jedničkový doplněk se vypočítá transformací bitu 1 na 0 a 0 na 1 naopak. Proto se něčí doplněk stane 11101011. Po výpočtu něčího doplňku vypočítáme dvojkový doplněk tak, že k doplňku jedničky přičteme 1 a výsledkem je 11101100.

Vytvořme program doplňku 2s.

 #include int main() { int n; // variable declaration printf('Enter the number of bits do you want to enter :'); scanf('%d',&n); char binary[n+1]; // binary array declaration; char onescomplement[n+1]; // onescomplement array declaration char twoscomplement[n+1]; // twoscomplement array declaration int carry=1; // variable initialization printf('
Enter the binary number : '); scanf('%s', binary); printf('%s', binary); printf('
The ones complement of the binary number is :&apos;); // Finding onescomplement in C for(int i=0;i<n;i++) { if(binary[i]="=&apos;0&apos;)" onescomplement[i]="1" ; else } onescomplement[n]="" printf('%s',onescomplement); printf('
the twos complement of a binary number is : '); finding twoscomplement in c for(int i="n-1;">=0; i--) { if(onescomplement[i] == &apos;1&apos; &amp;&amp; carry == 1) { twoscomplement[i] = &apos;0&apos;; } else if(onescomplement[i] == &apos;0&apos; &amp;&amp; carry == 1) { twoscomplement[i] = &apos;1&apos;; carry = 0; } else { twoscomplement[i] = onescomplement[i]; } } twoscomplement[n]=&apos;&apos;; printf(&apos;%s&apos;,twoscomplement); return 0; } </n;i++)>

Výstup

Doplněk 2s v C

Analýza výše uvedeného programu,

  • Nejprve zadáme počet bitů a ten se uloží do ' n proměnná.
  • Po zadání počtu bitů deklarujeme pole znaků, tj. binární znak[n+1], která obsahuje binární číslo. ' n ' je počet bitů, které jsme zadali v předchozím kroku; v podstatě definuje velikost pole.
  • Deklarujeme další dvě pole, tj. jeden doplněk[n+1] , a dvoukomplement[n+1]. The jeden doplněk[n+1] pole obsahuje jedničky doplněk binárního čísla, zatímco dvojkomplement[n+1] pole obsahuje dvojkový doplněk binárního čísla.
  • Inicializujte nést proměnné a přiřaďte této proměnné 1 hodnotu.
  • Po deklaracích zadáme binární číslo.
  • Nyní jednoduše vypočítáme jedničkový doplněk binárního čísla. K tomu vytvoříme a smyčka který se iteruje v binárním poli, for(int i=0;i. Ve smyčce for se podmínka kontroluje, zda je bit 1 nebo 0. Pokud je bit 1, pak OneComplement[i]=0 jiný OneComplement[i]=1 . Tímto způsobem je generován vlastní doplněk binárního čísla.
  • Po výpočtu vlastního doplňku vygenerujeme doplněk 2s binárního čísla. K tomu vytvoříme a smyčka který iteruje od posledního prvku k počátečnímu prvku. Ve smyčce for máme tři podmínky:
    • Pokud je bit onecomplement[i] 1 a hodnota carry je 1, pak do twocomplement[i] vložíme 0.
    • Pokud je bit onecomplement[i] 0 a hodnota carry je 1, vložíme 1 do dvoukomplement[i] a 0 do carry.
    • Pokud jsou výše uvedené dvě podmínky nepravdivé, pak onecomplement[i] se rovná twoscomplement[i].

Celá čísla se znaménkem jsou často reprezentovány v C pomocí zápis dvojkového doplňku . Pomocí stejného binární reprezentace nabízí mechanismus k vyjádření obojího pozitivní a záporná celá čísla . The nejvýznamnější bit (MSB) se používá jako podepsat bit v reprezentace doplňku dvojky , kde 0 označuje a kladné celé číslo , a 1 označuje a záporné číslo .

Počínaje a záporná čísla absolutní hodnotu v binární formě, můžete si vzít něčí doplněk (bitová negace) této hodnoty získat dvojkový doplněk zastoupení záporné celé číslo . Přidal jsi 1 k výsledná hodnota získat zastoupení dvojkový doplněk .

The kódování dvojkového doplňku v C může představovat celá čísla se znaménkem a může provádět rychlé aritmetické operace. Jednou z výhod použití dvojkového doplňku je schopnost dělat přidání a odčítání pomocí stejných binárních operací jako pro čísla bez znaménka.

The binární čísla se sčítají jako celá čísla bez znaménka při přidání dvojkového doplňku. Vynášení z místa hlavní kritický bit je prostě ignorován. Vzhledem k této skutečnosti manipulace podepsaná čísla jinak není nutné a přidávání se stává jednoduchým.

Zvažte přidání -5 a -3 za použití 8bitový dvojkový doplněk reprezentace, například:

Binární číslo pro -5 je 11111011.

Binární číslo pro -3 je 11111101 .

provedení doplnění:

 11111011 (-5) + 11111101 (-3) ------------- 111110100 (-8) 

Odpověď je 111110100 , v kterém dvojkový doplněk je rovný -8 .

Podobně jako u sčítání může být odečítání provedeno zpracováním druhý operand dvojkový doplněk, jako by to byl sčítání. Jinými slovy, přidáte dvojkový doplněk záporného čísla k prvnímu operandu, abyste jej odstranili.

Například když -3 se odečítá od -5 :

binárně, -5 je zastoupena 11111011 a -(-3) podle 00000011 (dva doplněk -3 )

Provedení odčítání

 11111011 (-5) + 00000011 (+3) ------------- 11111110 (-8) 

Výsledek je 11111110 , což se ve dvojkovém doplňku rovná -8 .

Závěr:

V C, 2s doplnit je binární reprezentace záporného čísla, které vznikne přidáním jedničky k číslu 1s doplnit . Počítačové systémy často využívají tuto myšlenku k reprezentaci čísel se znaménkem a k efektivnímu provádění aritmetických operací.

Chcete-li získat 2s doplnit binárního celého čísla, je třeba nejprve určit 1s doplnit čísla překlápěním bitů. Po tom, zastoupení 2s doplnit se získává pomocí přidání jednoho k 1s doplnit . The nejvýznamnější bit (MSB) bude fungovat jako znaménkový bit tím, že vyjadřuje, zda je číslo pozitivní nebo negativní .

Výpočet 2s doplnit pro dané binární celé číslo je uvedeno v přiloženém programu C. Uživatel je vyzván k zadání obou binární číslo a počet bitů. Poté program provede požadované procedury pro získání doplňku 1s a poté 2s doplnit . Nálezy jsou pak ukázány.

V informatice a programování je klíčové porozumět 2s doplnit reprezentaci, protože umožňuje efektivně zpracovat záporné hodnoty vyjádřené v binární podobě. Dělá sčítání, odčítání , a logické operace u obou jednodušší pozitivní a záporná čísla . Rozsah reprezentovatelná celá čísla je symetrický nula v důsledku 2s doplnit reprezentace, takže je vhodný pro různé numerické operace.

Programátoři mohou provádět aritmetické operace, pracovat s binárními daty a navrhovat algoritmy pomocí celých čísel se znaménkem v C a dalších programovacích jazycích tím, že pochopí myšlenku doplňku 2s a správně ji využívají.