logo

Wat is het 2s-complement in C?

Het 2s-complement in C wordt gegenereerd uit het 1s-complement in C. Zoals we weten, wordt het 1s-complement van een binair getal gecreëerd door bit 1 naar 0 en 0 naar 1 te transformeren; het 2s-complement van een binair getal wordt gegenereerd door één toe te voegen aan het 1s-complement van een binair getal.

Kort gezegd kunnen we zeggen dat het 2s-complement in C wordt gedefinieerd als de som van het ene-complement in C en één.

2s-complement in C

In de bovenstaande figuur is het binaire getal gelijk aan 00010100, en het ene-complement wordt berekend door bit 1 naar 0 en 0 naar 1 omgekeerd te transformeren. Daarom wordt iemands complement 11101011. Nadat we iemands complement hebben berekend, berekenen we het complement van de twee door 1 op te tellen bij het complement van de ene, en het resultaat is 11101100.

Laten we een programma van 2s-complement maken.

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

Uitvoer

2s-complement in C

Analyse van het bovenstaande programma,

  • Eerst voeren we het aantal bits in, en het wordt opgeslagen in de ' N ' variabel.
  • Na het invoeren van het aantal bits declareren we karakterarray, d.w.z. char binair[n+1], die het binaire getal bevat. De ' N ' is het aantal bits dat we in de vorige stap hebben ingevoerd; het definieert in feite de grootte van de array.
  • We declareren nog twee arrays, d.w.z. eencomplement[n+1] , En tweecomplement[n+1]. De eencomplement[n+1] array bevat het complement van een binair getal, terwijl de tweecomplement[n+1] array bevat het twee-complement van een binair getal.
  • Initialiseer de dragen variabele en wijs 1 waarde toe aan deze variabele.
  • Na declaraties voeren we het binaire getal in.
  • Nu berekenen we eenvoudig het ene-complement van een binair getal. Om dit te doen, maken we een lus dat itereert door de binaire array, for(int i=0;i. In de for-lus wordt gecontroleerd of de bit 1 of 0 is. Als de bit 1 is, dan eencomplement[i]=0 anders eencomplement[i]=1 . Op deze manier wordt iemands complement van een binair getal gegenereerd.
  • Nadat we iemands complement hebben berekend, genereren we het 2s-complement van een binair getal. Om dit te doen, maken we een lus dat itereert van het laatste element naar het startelement. In de for-lus hebben we drie voorwaarden:
    • Als het bit van enencomplement[i] 1 is en de waarde van carry 1 is, dan plaatsen we 0 in tweecomplement[i].
    • Als het bit van enencomplement[i] 0 is en de waarde van carry 1 is, dan plaatsen we 1 in tweecomplement[i] en 0 in carry.
    • Als de bovenstaande twee voorwaarden onwaar zijn, dan is ééncomplement[i] gelijk aan tweecomplement[i].

Getekende gehele getallen worden vaak weergegeven in C met behulp van de twee-complementnotatie . Hetzelfde gebruiken binaire representatie biedt een mechanisme om beide tot uitdrukking te brengen positief En negatieve gehele getallen . De meest significante bit (MSB) wordt gebruikt als de teken beetje in een twee-complement representatie , waar 0 geeft een aan positief integer , En 1 geeft een aan negatief nummer .

Beginnend met een negatieve getallen absolute waarde in binaire vorm, mag u de iemands complement (bitsgewijze ontkenning) van die waarde om de twee-complement vertegenwoordiging van de negatief geheel getal . Je voegt toe 1 naar de resulterende waarde om de vertegenwoordiging van de te verkrijgen twee-complement .

De twee-complementcodering in C kan vertegenwoordigen ondertekende gehele getallen en kan snelle rekenkundige bewerkingen uitvoeren. Een voordeel van het gebruik van twee-complement is het vermogen om te doen toevoeging En aftrekken met behulp van dezelfde binaire bewerkingen als voor niet-ondertekende nummers.

De binaire getallen worden bij elkaar opgeteld, zoals niet-ondertekende gehele getallen bij het toevoegen van twee-complement. Een uitvoering vanaf de locatie van de belangrijkste kritische stukje wordt gewoon buiten beschouwing gelaten. Vanwege dit feit, behandeling ondertekende nummers anders is niet nodig en optellen wordt eenvoudig.

Overweeg om toe te voegen -5 En -3 de ... gebruiken 8-bit twee-complement vertegenwoordiging, bijvoorbeeld:

Binair getal voor -5 is 11111011.

Binair getal voor -3 is 11111101 .

het uitvoeren van de toevoeging:

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

Het antwoord is 111110100 , welke erin twee-complement is gelijk aan -8 .

Net als bij optellen, kan aftrekken worden gedaan door de te behandelen tweede operand twee-complement alsof het een optelling is. Met andere woorden, je voegt het twee-complement van een negatief getal toe aan de eerste operand om deze te verwijderen.

Wanneer bijvoorbeeld -3 wordt afgetrokken -5 :

In binair, -5 wordt vertegenwoordigd door 11111011 En -(-3) door 00000011 (twee complement van -3 )

Het uitvoeren van de aftrekking

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

De uitkomst is 11111110 , wat in twee-complement gelijk is aan -8 .

Conclusie:

In C, de 2s aanvulling is een binaire representatie van een negatief getal dat ontstaat door er één bij op te tellen 1s aanvulling . Computersystemen maken vaak gebruik van dit idee om ondertekende getallen weer te geven en rekenkundige bewerkingen efficiënt uit te voeren.

Om de 2s aanvulling van een binair geheel getal moet men eerst de bepalen 1s aanvulling van het getal door de bits om te draaien. Daarna volgt de vertegenwoordiging van de 2s aanvulling wordt verkregen door er een toevoegen naar de 1s aanvulling . De meest significante bit (MSB) zal functioneren als een tekenbit door uit te drukken of een getal dat is positief of negatief .

De berekening van de 2s aanvulling voor een gegeven binair geheel getal wordt weergegeven in het bijgevoegde C-programma. De gebruiker wordt gevraagd om zowel de binair getal en het aantal bits. Daarna voert het programma de vereiste procedures uit om het 1s-complement te verwerven, en vervolgens het 2s aanvulling . Vervolgens worden de bevindingen getoond.

Bij informatica en programmeren is het van cruciaal belang om de 2s aanvulling representatie omdat het het mogelijk maakt om negatieve waarden, uitgedrukt in binair getal, effectief te verwerken. Het maakt optellen, aftrekken , En logische operaties eenvoudiger voor beide positief En negatieve getallen . Het bereik van representatieve gehele getallen is symmetrisch ongeveer nul vanwege de 2s aanvulling representatie, waardoor het geschikt is voor verschillende numerieke bewerkingen.

Programmeurs kunnen rekenkundige bewerkingen uitvoeren, met binaire gegevens werken en algoritmen ontwerpen met behulp van gehele getallen met teken in C en andere programmeertalen door het idee van 2s-complement te begrijpen en dit op de juiste manier te gebruiken.