logo

Hva er 2-er-komplementet i C?

2s-komplementet i C genereres fra 1s-komplementet i C. Som vi vet at 1s-komplementet til et binært tall skapes ved å transformere bit 1 til 0 og 0 til 1; 2s-komplementet til et binært tall genereres ved å legge en til 1s-komplementet til et binært tall.

Kort oppsummert kan vi si at 2s-komplementet i C er definert som summen av ens komplement i C og en.

2s komplement i C

I figuren ovenfor er det binære tallet lik 00010100, og dets ens komplement beregnes ved å transformere biten 1 til 0 og 0 til 1 omvendt. Derfor blir ens komplement 11101011. Etter å ha beregnet ens komplement, beregner vi de tos komplement ved å legge til 1 til ens komplement, og resultatet er 11101100.

La oss lage et program med 2s-komplement.

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

Produksjon

2s komplement i C

Analyse av programmet ovenfor,

  • Først legger vi inn antall biter, og det blir lagret i ' n ' variabel.
  • Etter å ha angitt antall biter, erklærer vi tegnarray, dvs. char binær[n+1], som inneholder det binære tallet. den ' n ' er antall biter som vi skrev inn i forrige trinn; det definerer i utgangspunktet størrelsen på matrisen.
  • Vi erklærer ytterligere to matriser, dvs. ettkomplement[n+1] , og tokomplement[n+1]. De ettkomplement[n+1] array inneholder en-komplementet til et binært tall mens tokomplement[n+1] array inneholder tos komplement av et binært tall.
  • Initialiser bære variabel og tilordne 1 verdi til denne variabelen.
  • Etter deklarasjoner legger vi inn det binære tallet.
  • Nå beregner vi ganske enkelt ens komplement til et binært tall. For å gjøre dette oppretter vi en Løkke som itererer gjennom den binære matrisen, for(int i=0;i. I for loop kontrolleres betingelsen om biten er 1 eller 0. Hvis biten er 1 da onescomplement[i]=0 ellers onescomplement[i]=1 . På denne måten blir ens komplement av et binært tall generert.
  • Etter å ha beregnet ens komplement, genererer vi 2s komplementet til et binært tall. For å gjøre dette oppretter vi en Løkke som itererer fra det siste elementet til startelementet. I for loop har vi tre betingelser:
    • Hvis biten av enskomplement[i] er 1 og verdien av bære er 1, setter vi 0 i tokomplement[i].
    • Hvis biten av enskomplement[i] er 0 og verdien av bære er 1, setter vi 1 i tokomplement[i] og 0 i bære.
    • Hvis de to ovennevnte betingelsene er usanne, er enskomplement[i] lik tokomplement[i].

Signerte heltall er ofte representert i C ved å bruke tos komplementnotasjon . Bruker det samme binær representasjon tilbyr en mekanisme for å uttrykke begge deler positivt og negative heltall . De mest signifikant bit (MSB) brukes som tegn bit i en tos komplementrepresentasjon , hvor 0 betegner a positivt heltall , og 1 betegner a negativt tall .

Starter med en negative tall absolutt verdi i binær form, kan du ta ens komplement (bitvis negasjon) av den verdien for å få tos komplement representasjon av negativt heltall . Du legger til 1 til resulterende verdi å skaffe seg representasjonen av tos komplement .

De tos komplementkoding i C kan representere signerte heltall og kan utføre raske aritmetiske operasjoner. En fordel med å ansette tos komplement er evnen til å gjøre addisjon og subtraksjon bruker de samme binære operasjonene som for tall uten fortegn.

De binære tall legges sammen som usignerte heltall når du legger til to-komplement. En gjennomføring fra plasseringen av viktigste kritiske biten blir bare tilsidesatt. På grunn av dette faktum, håndtering signerte tall annerledes er ikke nødvendig, og tillegg blir enkelt.

Vurder å legge til -5 og -3 bruker 8-bits to-komplement representasjon, for eksempel:

Binært tall for -5 er 11111011.

Binært tall for -3 er 11111101 .

utføre tillegget:

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

Svaret er 111110100 , som i tos komplement er lik -8 .

I likhet med addisjon kan subtraksjon gjøres ved å behandle andre operand tos komplement som om det var tillegg. Med andre ord, du legger til tos komplement av et negativt tall til den første operanden for å fjerne den.

For eksempel når -3 trekkes fra -5 :

I binær, -5 er representert ved 11111011 og -(-3) av 00000011 (tos komplement av -3 )

Utføre subtraksjonen

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

Resultatet er 11111110 , som i tos komplement er lik -8 .

Konklusjon:

I C, den 2s komplement er en binær representasjon av et negativt tall som er opprettet ved å legge en til 1s komplement . Datasystemer bruker ofte denne ideen for å representere fortegnede tall og effektivt utføre aritmetiske operasjoner.

For å få 2s komplement av et binært heltall, må man først bestemme 1s komplement av tallet ved å snu bitene. Etter det, representasjonen av 2s komplement er oppnådd av legger til en til 1s komplement . De mest signifikant bit (MSB) vil fungere som en tegnbit ved å uttrykke om et tall er positivt eller negativ .

Beregningen av 2s komplement for et gitt binært heltall vises i vedlagte C-program. Brukeren blir bedt om å legge inn både binært tall og antall biter. Etter det gjør programmet de nødvendige prosedyrene for å skaffe 1s-komplementet, og deretter 2s komplement . Deretter vises funnene.

Innen datavitenskap og programmering er det avgjørende å forstå 2s komplement representasjon siden det gjør det mulig å håndtere negative verdier uttrykt i binært effektivt. Det gjør addisjon, subtraksjon , og logiske operasjoner enklere på begge positivt og negative tall . Utvalget av representable heltall er symmetrisk om null på grunn av 2s komplement representasjon, noe som gjør den passende for ulike numeriske operasjoner.

Programmerere kan utføre aritmetiske operasjoner, arbeide med binære data og designe algoritmer ved å bruke signerte heltall i C og andre programmeringsspråk ved å forstå ideen om 2s-komplement og bruke det riktig.