logo

Što je komplement 2s u C?

Komplement 2s u C generira se iz komplementa 1s u C. Kao što znamo da se komplement 1s binarnog broja stvara transformacijom bita 1 u 0 i 0 u 1; komplement 2s binarnog broja generira se dodavanjem jedinice komplementu 1s binarnog broja.

Ukratko, možemo reći da je komplement 2s u C definiran kao zbroj komplementa jedan u C i jedan.

2s komplement u C

Na gornjoj slici binarni broj jednak je 00010100, a njegov komplement jedinica izračunava se transformacijom bita 1 u 0 i 0 u 1 obrnuto. Prema tome, jedan komplement postaje 11101011. Nakon izračunavanja jednog komplementa, izračunavamo komplement dvojke dodavanjem 1 komplementu jedinice, a rezultat je 11101100.

Kreirajmo program od 2s komplementa.

 #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++)>

Izlaz

2s komplement u C

Analiza gore navedenog programa,

  • Prvo unosimo broj bitova i on se pohranjuje u ' n ' varijabla.
  • Nakon unosa broja bitova, deklariramo niz znakova, tj. char binarni [n+1], koji sadrži binarni broj. ' n ' je broj bitova koji smo unijeli u prethodnom koraku; u osnovi definira veličinu niza.
  • Deklariramo još dva niza, tj. jedan komplement [n+1] , i dvokomplement[n+1]. The jedan komplement [n+1] niz sadrži komplement jedinica binarnog broja dok dvokomplement [n+1] niz sadrži dva komplementa binarnog broja.
  • Inicijalizirajte nositi varijablu i dodijelite 1 vrijednost ovoj varijabli.
  • Nakon deklaracija, unosimo binarni broj.
  • Sada jednostavno izračunavamo komplement jedinice binarnog broja. Da bismo to učinili, stvaramo a petlja koji se ponavlja kroz binarni niz, for(int i=0;i. U for petlji provjerava se uvjet da li je bit 1 ili 0. Ako je bit 1 tada jedankomplement[i]=0 drugo jedankomplement[i]=1 . Na taj način se generira jedan komplement binarnog broja.
  • Nakon izračuna nečijeg komplementa, generiramo komplement 2s binarnog broja. Da bismo to učinili, stvaramo a petlja koji ponavlja od posljednjeg elementa do početnog elementa. U for petlji imamo tri uvjeta:
    • Ako je bit onecomplement[i] 1 i vrijednost prijenosa je 1, tada stavljamo 0 u twocomplement[i].
    • Ako je bit onescomplement[i] 0 i vrijednost prijenosa je 1, tada stavljamo 1 u twoscomplement[i] i 0 u prijenos.
    • Ako su gornja dva uvjeta netočna, tada je onecomplement[i] jednako twoscomplement[i].

Cijeli brojevi s predznakom često su predstavljeni u C-u pomoću komplement dvojke . Korištenje istog binarni prikaz nudi mehanizam za izražavanje oboje pozitivan i negativni cijeli brojevi . The najvažniji bit (MSB) koristi se kao znakovni bit u predstavljanje komplementa dvaju , gdje 0 označava a pozitivan cijeli broj , i 1 označava a negativan broj .

Počevši s a negativni brojevi apsolutnu vrijednost u binarnom obliku, možete uzeti nečiji komplement (bitna negacija) te vrijednosti da biste dobili komplement dva predstavljanje negativan cijeli broj . Vi dodajete 1 prema rezultantna vrijednost steći zastupanje komplement dva .

The kodiranje komplementom dva u C može predstavljati cijeli brojevi s predznakom i može izvoditi brze aritmetičke operacije. Jedna od prednosti korištenja komplementa dvojke je sposobnost da se dodatak i oduzimanje koristeći iste binarne operacije kao i za brojeve bez predznaka.

The binarni brojevi zbrajaju se kao cijeli brojevi bez predznaka pri zbrajanju komplementa dvojke. Iznošenje s mjesta glavni kritični bit samo se zanemaruje. Zbog te činjenice rukovanje potpisani brojevi drukčije nije potrebno, a zbrajanje postaje jednostavno.

Razmislite o dodavanju -5 i -3 koristiti 8-bitni komplement dva reprezentacija, na primjer:

Binarni broj za -5 je 11111011.

Binarni broj za -3 je 11111101 .

izvođenje dodavanja:

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

Odgovor je 111110100 , koji u komplement dva jednako je -8 .

Slično zbrajanju, oduzimanje se može izvršiti tretiranjem drugi operandi komplement dva kao da je zbrajanje. Drugim riječima, dodajete dva komplementa negativnog broja prvom operandu da biste ga uklonili.

Na primjer, kada -3 se oduzima od -5 :

U binarnom obliku, -5 predstavlja ga 11111011 i -(-3) po 00000011 (komplement od dva -3 )

Izvođenje oduzimanja

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

Ishod je 11111110 , što je u komplementu dva jednako -8 .

Zaključak:

U C, 2s komplement je binarni prikaz negativnog broja koji se stvara dodavanjem jedan na 1s komplement . Računalni sustavi često koriste ovu ideju za predstavljanje brojeva s predznakom i učinkovito izvođenje aritmetičkih operacija.

Da biste dobili 2s komplement binarnog cijelog broja, prvo se mora odrediti 1s komplement broja okretanjem bitova. Nakon toga, reprezentacija u 2s komplement dobiva se pomoću dodajući jedan prema 1s komplement . The najvažniji bit (MSB) funkcionirat će kao bit predznaka izražavajući je li broj pozitivan ili negativan .

Izračun od 2s komplement za dati binarni cijeli broj prikazan je u priloženom C programu. Od korisnika se traži da unese oba binarni broj i broj bitova. Nakon toga, program provodi potrebne postupke za dobivanje komplementa 1s, a zatim 2s komplement . Zatim se prikazuju nalazi.

U informatici i programiranju ključno je razumjeti 2s komplement predstavljanje jer omogućuje učinkovito rukovanje negativnim vrijednostima izraženim u binarnom obliku. Radi zbrajanje, oduzimanje , i logičke operacije jednostavnije na oba pozitivan i negativni brojevi . Raspon od reprezentativni cijeli brojevi je simetričan oko nula zbog 2s komplement reprezentacije, što ga čini prikladnim za razne numeričke operacije.

Programeri mogu provoditi aritmetičke operacije, raditi s binarnim podacima i dizajnirati algoritme koristeći cijele brojeve s predznakom u C-u i drugim programskim jezicima razumijevanjem ideje komplementa 2s i pravilnom upotrebom istog.