logo

Vad är 2s-komplementet i C?

2s-komplementet i C genereras från 1s-komplementet i C. Som vi vet skapas 1s-komplementet av ett binärt tal genom att transformera bit 1 till 0 och 0 till 1; 2s-komplementet av ett binärt tal genereras genom att addera ett till 1s-komplementet av ett binärt tal.

Kortfattat kan vi säga att 2s-komplementet i C definieras som summan av ettans komplement i C och ett.

2s komplement i C

I figuren ovan är det binära talet lika med 00010100, och dess etta-komplement beräknas genom att transformera biten 1 till 0 och 0 till 1 vice versa. Därför blir ens komplement 11101011. Efter att ha räknat ut ens komplement beräknar vi de tvås komplement genom att lägga till 1 till ettans komplement, och dess resultat är 11101100.

Låt oss skapa ett 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++)>

Produktion

2s komplement i C

Analys av ovanstående program,

  • Först matar vi in ​​antalet bitar, och det lagras i n ' variabel.
  • Efter att ha angett antalet bitar deklarerar vi teckenuppsättning, dvs. char binär[n+1], som innehåller det binära talet. den ' n ' är antalet bitar som vi angav i föregående steg; det definierar i princip storleken på arrayen.
  • Vi deklarerar ytterligare två arrayer, dvs. ettkomplement[n+1] , och tvåkomplement[n+1]. De ettkomplement[n+1] matrisen innehåller ett-komplementet till ett binärt tal medan tvåkomplement[n+1] array innehåller tvås komplement av ett binärt tal.
  • Initiera bära variabel och tilldela 1 värde till denna variabel.
  • Efter deklarationer matar vi in ​​det binära numret.
  • Nu beräknar vi helt enkelt ens komplement till ett binärt tal. För att göra detta skapar vi en slinga som itererar genom hela den binära arrayen, for(int i=0;i. I for loop kontrolleras villkoret om biten är 1 eller 0. Om biten är 1 då ettkomplement[i]=0 annan onescomplement[i]=1 . På så sätt genereras ens komplement av ett binärt tal.
  • Efter att ha beräknat ens komplement genererar vi 2s komplementet till ett binärt tal. För att göra detta skapar vi en slinga som itererar från det sista elementet till startelementet. I for loop har vi tre villkor:
    • Om biten av onescomplement[i] är 1 och värdet på carry är 1 så sätter vi 0 i twocomplement[i].
    • Om biten av ettkomplement[i] är 0 och värdet på bär är 1 så sätter vi 1 i tvåkomplement[i] och 0 i bär.
    • Om de två ovanstående villkoren är falska är ettkomplement[i] lika med tvåkomplement[i].

Signerade heltal representeras ofta i C med hjälp av tvås komplementnotation . Använder samma binär representation erbjuder en mekanism för att uttrycka båda positiv och negativa heltal . De mest betydande bit (MSB) används som tecken bit i en tvås komplementrepresentation , var 0 betecknar a positivt heltal , och 1 betecknar a negativt tal .

Börjar med a negativa tal absolut värde i binär form kan du ta ens komplement (bitvis negation) av det värdet för att få tvås komplement representation av negativt heltal . Du adderar 1 till resulterande värde att förvärva representationen av tvås komplement .

De tvås komplementkodning i C kan representera undertecknade heltal och kan utföra snabba aritmetiska operationer. En fördel med att anställa tvås komplement är förmågan att göra tillägg och subtraktion använder samma binära operationer som för tal utan tecken.

De binära tal läggs ihop som heltal utan tecken när man lägger till två komplement. En genomföring från platsen för viktigaste kritiska biten bara ignoreras. På grund av detta faktum, hantering signerade nummer annorlunda är inte nödvändigt, och addition blir enkel.

Överväg att lägga till -5 och -3 använda 8-bitars två-komplement representation, till exempel:

Binärt nummer för -5 är 11111011.

Binärt nummer för -3 är 11111101 .

utföra tillägget:

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

Svaret är 111110100 , i vilken tvås komplement är lika med -8 .

I likhet med addition kan subtraktion göras genom att behandla andra operandens tvås komplement som om det vore addition. Med andra ord, du lägger till de tvås komplement av ett negativt tal till den första operanden för att ta bort den.

Till exempel när -3 subtraheras från -5 :

I binärt, -5 representeras av 11111011 och -(-3) förbi 00000011 (två komplement till -3 )

Genomför subtraktionen

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

Resultatet är 11111110 , som i tvås komplement är lika med -8 .

Slutsats:

I C, den 2s komplement är en binär representation av ett negativt tal som skapas genom att lägga till ett till 1s komplement . Datorsystem använder ofta denna idé för att representera tecken med tecken och effektivt utföra aritmetiska operationer.

För att få 2s komplement av ett binärt heltal måste man först bestämma 1s komplement av numret genom att vända bitarna. Efter det, representationen av 2s komplement erhålls av lägga till en till 1s komplement . De mest betydande bit (MSB) kommer att fungera som en teckenbit genom att uttrycka om ett tal är positiv eller negativ .

Beräkningen av 2s komplement för ett givet binärt heltal visas i det bifogade C-programmet. Användaren uppmanas att mata in både binärt tal och antalet bitar. Därefter gör programmet de nödvändiga procedurerna för att förvärva 1s-komplementet, och sedan 2s komplement . Fynden visas sedan.

Inom datavetenskap och programmering är det avgörande att förstå 2s komplement representation eftersom det gör det möjligt att effektivt hantera negativa värden uttryckta i binärt. Den gör addition, subtraktion , och logiska operationer enklare på båda positiv och negativa tal . Räckvidden av representerbara heltal är symmetrisk om noll pågrund av 2s komplement representation, vilket gör den lämplig för olika numeriska operationer.

Programmerare kan utföra aritmetiska operationer, arbeta med binära data och designa algoritmer med hjälp av signerade heltal i C och andra programmeringsspråk genom att förstå idén med 2s-komplement och använda det korrekt.