logo

Mi a 2s komplementere C-ben?

A C-beli 2-es komplementer a C-ben található 1-es komplementerből jön létre. Mint tudjuk, egy bináris szám 1-es komplementere az 1-es bit 0-ra és 0-ról 1-re való transzformációjával jön létre; egy kettes szám 2-es komplementerét úgy állítjuk elő, hogy egy kettes szám 1-es komplementeréhez hozzáadunk egyet.

Röviden azt mondhatjuk, hogy a C-beli 2-es komplementer a C-beli egyes komplementerének és az egyesnek az összege.

2s komplementer C-ben

A fenti ábrán a bináris szám egyenlő 00010100-zal, és annak komplementerét úgy számítjuk ki, hogy az 1-es bitet 0-ra, a 0-t pedig 1-re alakítjuk fordítva. Ezért egy komplementerünk 11101011 lesz. A komplementer kiszámítása után a kettő komplementerét úgy számítjuk ki, hogy az egyes komplementeréhez hozzáadunk 1-et, és ennek eredménye 11101100.

Készítsünk 2-es komplementer programot.

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

Kimenet

2s komplementer C-ben

A fenti program elemzése,

  • Először beírjuk a bitek számát, és ez a ' n ' változó.
  • A bitek számának megadása után karaktertömböt deklarálunk, azaz bináris karakter [n+1], amely a kettes számot tartalmazza. A ' n ' az előző lépésben megadott bitek száma; alapvetően a tömb méretét határozza meg.
  • Deklarálunk még két tömböt, pl. egyek kiegészítése[n+1] , és kétkomplementer[n+1]. A egyek kiegészítése[n+1] tömb egy bináris szám komplementerét tartalmazza, míg a két komplement[n+1] tömb egy bináris szám kettős komplemensét tartalmazza.
  • Inicializálja a visz változót, és rendeljen ehhez a változóhoz 1 értéket.
  • A deklarációk után beírjuk a bináris számot.
  • Most egyszerűen kiszámoljuk egy bináris szám egyes komplementerét. Ehhez létrehozunk a hurok amely az egész bináris tömbben iterál, for(int i=0;i. A for ciklusban a feltételt ellenőrizzük, hogy a bit 1 vagy 0. Ha a bit 1, akkor egyeskomplement[i]=0 más onescomplement[i]=1 . Ily módon egy bináris szám komplementere jön létre.
  • A komplementer kiszámítása után egy kettes szám 2s komplementerét állítjuk elő. Ehhez létrehozunk a hurok amely az utolsó elemtől a kezdő elemig iterál. A for ciklusban három feltételünk van:
    • Ha az oneskomplement[i] bitje 1, és a átvitel értéke 1, akkor 0-t teszünk két komplementbe[i].
    • Ha az oneskomplement[i] bitje 0 és a carry értéke 1, akkor 1-et teszünk a twocomplement[i]-be és 0-t a átvitelbe.
    • Ha a fenti két feltétel hamis, akkor az onekomplement[i] egyenlő a twoscomplement[i]-vel.

Előjeles egész számok gyakran ábrázolják C-ben a kettes komplement jelölése . Ugyanazt használva bináris reprezentáció mechanizmust kínál mindkettő kifejezésére pozitív és negatív egész számok . A legjelentősebb bit (MSB) mint a jel bit a kettes komplemens reprezentációja , ahol 0 jelöli a pozitív egész szám , és 1 jelöli a negatív szám .

Kezdve a negatív számok abszolút értéket bináris formában, akkor veheti a egy komplementer (bitenkénti tagadás) ennek az értéknek a megszerzéséhez kettő komplementere ábrázolása a negatív egész szám . Hozzáteszed 1 hoz eredő érték hogy megszerezze a képviseletét a kettő komplementere .

A kettes komplement kódolás C-ben képviselheti előjeles egész számok és gyors aritmetikai műveleteket tud végrehajtani. A kettő komplementer alkalmazásának egyik előnye a tennivaló kiegészítés és kivonás ugyanazokat a bináris műveleteket használja, mint az előjel nélküli számoknál.

A bináris számok összeadjuk, mint előjel nélküli egész számok a kettő komplementerének összeadásakor. Kihordás a helyszínről fő kritikus bit csak figyelmen kívül hagyják. Ennek a ténynek köszönhetően a kezelés aláírt számok másképp nem szükséges, és az összeadás egyszerűvé válik.

Fontolja meg a hozzáadását -5 és -3 használni a 8 bites kettes komplementer reprezentáció, például:

Bináris szám ehhez -5 van 11111011.

Bináris szám ehhez -3 van 11111101 .

a kiegészítés végrehajtása:

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

A válasz 111110100 , amely be kettő komplementere egyenlő -8 .

Az összeadáshoz hasonlóan a kivonás is elvégezhető a második operandus kettes kiegészítése mintha összeadás lenne. Más szóval, hozzáadja egy negatív szám kettős komplementerét az első operandushoz, hogy eltávolítsa azt.

Például mikor -3 levonásra kerül -5 :

binárisan, -5 képviseli 11111011 és (-3) által 00000011 (kettő kiegészítése -3 )

A kivonás végrehajtása

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

Az eredmény az 11111110 , amely kettős komplementerben egyenlő -8 .

Következtetés:

C-ben a 2s komplementer egy negatív szám bináris reprezentációja, amelyet úgy hozunk létre, hogy hozzáadunk egyet a 1s komplementer . A számítógépes rendszerek gyakran alkalmazzák ezt az ötletet az előjeles számok ábrázolására és az aritmetikai műveletek hatékony végrehajtására.

Ahhoz, hogy a 2s komplementer egy bináris egész számról először meg kell határozni a 1s komplementer a számot a bitek átfordításával. Ezt követően a reprezentáció a 2s komplementer által szerzik meg hozzátéve egyet hoz 1s komplementer . A legjelentősebb bit (MSB) jelbitként fog működni, kifejezve, hogy egy szám az pozitív vagy negatív .

A számítás a 2s komplementer adott bináris egész számra a mellékelt C programban látható. A felhasználónak meg kell adnia mind a bináris szám és a bitek számát. Ezt követően a program elvégzi a szükséges eljárásokat az 1-es kiegészítés megszerzéséhez, majd a 2s komplementer . Az eredményeket ezután bemutatják.

A számítástechnikában és a programozásban döntő fontosságú, hogy megértsük a 2s komplementer reprezentáció, mivel lehetővé teszi a binárisan kifejezett negatív értékek hatékony kezelését. Ez teszi összeadás, kivonás , és logikai műveletek mindkettőnél egyszerűbb pozitív és negatív számok . A tartomány a ábrázolható egész számok szimmetrikus kb nulla miatt a 2s komplementer ábrázolás, így alkalmas különféle numerikus műveletekre.

A programozók aritmetikai műveleteket hajthatnak végre, dolgozhatnak bináris adatokkal, és algoritmusokat tervezhetnek előjeles egész számok használatával C-ben és más programozási nyelvekben, ha megértik a 2-es kiegészítés gondolatát és megfelelően használják azt.