logo

Какво е допълнението 2s в C?

Допълнението 2s в C се генерира от допълнението 1s в C. Както знаем, допълнението 1s на двоично число се създава чрез трансформиране на бит 1 в 0 и 0 в 1; допълнението 2s на двоично число се генерира чрез добавяне на единица към допълнението 1s на двоично число.

Накратко, можем да кажем, че допълнението 2s в C се определя като сбор от допълнението на единица в C и едно.

2s допълнение в C

В горната фигура двоичното число е равно на 00010100, а неговото допълнение към единица се изчислява чрез трансформиране на бит 1 в 0 и 0 в 1 обратно. Следователно допълнението на единица става 11101011. След като изчислим допълнението на единица, ние изчисляваме допълнението на двете, като добавим 1 към допълнението на единицата и резултатът е 11101100.

Нека създадем програма от 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++)>

Изход

2s допълнение в C

Анализ на горната програма,

  • Първо въвеждаме броя на битовете и той се съхранява в ' н ' променлива.
  • След като въведем броя битове, декларираме символен масив, т.е. char двоичен [n+1], който съдържа двоичното число. ' н ' е броят на битовете, които сме въвели в предишната стъпка; той основно определя размера на масива.
  • Декларираме още два масива, т.е. едно допълнение [n+1] , и двойно допълнение[n+1]. The едно допълнение [n+1] масивът съдържа допълнението към единиците на двоично число, докато двойно допълнение [n+1] масивът съдържа двете добавки на двоично число.
  • Инициализирайте носят променлива и присвоете 1 стойност на тази променлива.
  • След декларациите въвеждаме двоичното число.
  • Сега просто изчисляваме допълнението към единица на двоично число. За да направим това, създаваме a цикъл който итерира в целия двоичен масив, за (int i=0;i. В for цикъл се проверява условието дали битът е 1 или 0. Ако битът е 1, тогава onecomplement[i]=0 друго onecomplement[i]=1 . По този начин се генерира нечие допълнение към двоично число.
  • След като изчислим нечие допълнение, ние генерираме допълнение 2s на двоично число. За да направим това, създаваме a цикъл който итерира от последния елемент до началния елемент. В for цикъла имаме три условия:
    • Ако битът на onecomplement[i] е 1 и стойността на пренасянето е 1, тогава поставяме 0 в twocomplement[i].
    • Ако битът на onecomplement[i] е 0 и стойността на пренасяне е 1, тогава поставяме 1 в twoscomplement[i] и 0 в пренасяне.
    • Ако горните две условия са неверни, тогава onecomplement[i] е равно на twoscomplement[i].

Цели числа със знак често се представят в C с помощта на означение за допълнение на две . Използвайки същото двоично представяне предлага механизъм за изразяване и на двете положителен и отрицателни цели числа . The най-значимият бит (MSB) се използва като знак бит в допълващо представяне на две , където 0 обозначава а положително цяло число , и 1 обозначава а отрицателно число .

Започвайки с a отрицателни числа абсолютна стойност в двоична форма, можете да вземете нечие допълнение (побитово отрицание) от тази стойност, за да получите допълнение на две представителство на отрицателно цяло число . Ти Добави 1 към резултатна стойност да придобие представителството на допълнение на две .

The кодиране с допълнение от две в C може да представлява цели числа със знак и може да извършва бързи аритметични операции. Едно предимство от използването на допълнение на две е способността да се прави допълнение и изваждане използвайки същите двоични операции като за числа без знак.

The двоични числа се добавят заедно като цели числа без знак при добавяне на допълнение от две. Изнасяне от местонахождението на основен критичен бит просто се пренебрегва. Поради този факт боравене подписани числа различно не е необходимо и добавянето става просто.

Помислете за добавяне -5 и -3 използвайки 8-битово двойно допълнение представителство, например:

Двоично число за -5 е 11111011.

Двоично число за -3 е 11111101 .

извършване на добавянето:

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

Отговорът е 111110100 , която в допълнение на две е равно на -8 .

Подобно на събирането, изваждането може да се извърши чрез третиране на втори операнд допълнение на две, сякаш е събиране. С други думи, добавяте допълнението на двете отрицателно число към първия операнд, за да го премахнете.

Например, когато -3 се изважда от -5 :

в двоичен код, -5 се представлява от 11111011 и -(-3) от 00000011 (две е допълнение към -3 )

Извършване на изваждането

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

Резултатът е 11111110 , което в допълнение от две е равно на -8 .

Заключение:

В C, 2s допълнение е двоично представяне на отрицателно число, което се създава чрез добавяне на единица към 1s допълнение . Компютърните системи често използват тази идея за представяне на числа със знак и ефективно извършване на аритметични операции.

За да получите 2s допълнение на двоично цяло число, първо трябва да се определи 1s допълнение на числото чрез обръщане на битовете. След това представителството на 2s допълнение се получава от добавяне на един към 1s допълнение . The най-значимият бит (MSB) ще функционира като знаков бит, като изразява дали дадено число е положителен или отрицателен .

Изчисляването на 2s допълнение за дадено двоично цяло число е показано в приложената C програма. Потребителят е подканен да въведе и двете двоично число и броя на битовете. След това програмата извършва необходимите процедури за получаване на 1s допълнението и след това на 2s допълнение . След това се показват констатациите.

В компютърните науки и програмирането е от решаващо значение да се разбере 2s допълнение представяне, тъй като прави възможно ефективното обработване на отрицателни стойности, изразени в двоичен код. Това прави събиране, изваждане , и логически операции по-просто и на двете положителен и отрицателни числа . Обхватът на представими цели числа е симетричен около нула поради 2s допълнение представяне, което го прави подходящ за различни числени операции.

Програмистите могат да извършват аритметични операции, да работят с двоични данни и да проектират алгоритми, използвайки цели числа със знак в C и други езици за програмиране, като разберат идеята за 2s допълнение и правилно го използват.