Dvejetainio skaičiaus papildymas 1 ir 2
Pateikę dvejetainį skaičių kaip eilutę, atspausdinkite jo 1 ir 2 papildymus.
1 papildymas dvejetainis skaičius yra kitas dvejetainis skaičius, gaunamas perjungiant visus jame esančius bitus, t. y. pakeitus 0 bitą į 1 ir 1 bitą į 0. 1 komplemento formate teigiami skaičiai lieka nepakitę . Neigiami skaičiai gaunami imant teigiamų atitikmenų 1 komplementą.
pavyzdžiui, +9 bus vaizduojamas kaip 00001001 aštuonių bitų žymėjime, o -9 bus vaizduojamas kaip 11110110, kuris yra 00001001 papildymas 1.
Pavyzdžiai:
1's complement of '0111' is '1000' 1's complement of '1100' is '0011'
2 papildymas dvejetainio skaičiaus yra 1, pridedamas prie dvejetainio skaičiaus 1 komplemento. Dvejetainių skaičių komplemento 2 vaizde MSB žymi ženklą su „0“, naudojamu pliuso ženklu, ir „1“, naudojamą minuso ženklui. likę bitai naudojami dydžiui pavaizduoti. teigiami dydžiai pateikiami taip pat, kaip ir ženklo bito arba 1 komplemento vaizdavimo atveju. Neigiami dydžiai rodomi jų teigiamų atitikmenų 2 papildymu.
Pavyzdžiai:
2's complement of '0111' is '1001' 2's complement of '1100' is '0100'
Kitas triukas ieškant dviejų komplemento:
1 žingsnis: Pradėkite nuo mažiausiai reikšmingo bito ir eikite į kairę, kol rasite 1. Kol rasite 1, bitai lieka tokie patys
2 žingsnis: Suradę 1, palikite 1 tokį, koks jis yra, ir dabar
3 veiksmas: Apverskite visus likusius bitus į 1.
Iliustracija
Tarkime, kad turime rasti 100100 2s komplementą
1 žingsnis: Pereikite ir palikite bitą taip pat, kol rasite 1. Čia x dar nežinomas. Atsakymas = xxxx00 –
2 žingsnis : Radai 1. Tegul lieka taip pat. Atsakymas = xxx100
3 veiksmas: Apverskite visus likusius bitus į 1. Atsakymas = 011100.
Taigi 100100 2s papildinys yra 011100.
1 rekomenduojamos praktikos papildymas Išbandykite!Norėdami papildyti, mums tiesiog reikia apversti visas dalis.
2 papildymui pirmiausia randame vieną. Perkeliame vieneto komplementą, pradedant nuo LSB (mažiausiai reikšmingas bitas) ir ieškome 0. Apverčiame visus 1 (keičiame į 0), kol randame 0. Galiausiai apverčiame rastą 0. Pavyzdžiui, 2 papildinys 01000 yra 11000 (Atkreipkite dėmesį, kad pirmiausia randame 01000 papildinį kaip 10111). Jei yra visi 1 (viename papildyme), eilutėje pridedame papildomą 1. Pavyzdžiui, 2 papildinys 000 yra 1000 (1 papildinys 000 yra 111).
Žemiau pateikiamas įgyvendinimas.
C++
// C++ program to print 1's and 2's complement of> // a binary number> #include> using> namespace> std;> > // Returns '0' for '1' and '1' for '0'> char> flip(> char> c) {> return> (c ==> '0'> )?> '1'> :> '0'> ;}> > // Print 1's and 2's complement of binary number> // represented by 'bin'> void> printOneAndTwosComplement(string bin)> {> > int> n = bin.length();> > int> i;> > > string ones, twos;> > ones = twos => ''> ;> > > // for ones complement flip every bit> > for> (i = 0; i ones += flip(bin[i]); // for two's complement go from right to left in // ones complement and if we get 1 make, we make // them 0 and keep going left when we get first // 0, make that 1 and go out of loop twos = ones; for (i = n - 1; i>= 0; i--) { if (vieni[i] == '1') du[i] = '0'; else { twos[i] = '1'; pertrauka; } } // Jei nėra pertraukos : visi yra 1 kaip 111 arba 11111; // tokiu atveju pradžioje pridėkite papildomą 1 if (i == -1) twos = '1' + twos; cout < < '1's complement: ' < < ones < < endl; cout < < '2's complement: ' < < twos < < endl; } // Driver program int main() { string bin = '1100'; printOneAndTwosComplement(bin); return 0; }> |
Java
// Java program to print 1's and 2's complement of> // a binary number> > class> GFG> {> > > // Returns '0' for '1' and '1' for '0'> > static> char> flip(> char> c)> > {> > return> (c ==> '0'> ) ?> '1'> :> '0'> ;> > }> > > // Print 1's and 2's complement of binary number> > // represented by 'bin'> > static> void> printOneAndTwosComplement(String bin)> > {> > int> n = bin.length();> > int> i;> > > String ones => ''> , twos => ''> ;> > ones = twos => ''> ;> > > // for ones complement flip every bit> > for> (i => 0> ; i { ones += flip(bin.charAt(i)); } // for two's complement go from right to left in // ones complement and if we get 1 make, we make // them 0 and keep going left when we get first // 0, make that 1 and go out of loop twos = ones; for (i = n - 1; i>= 0; i--) { if (one.charAt(i) == '1') { twos = twos.substring(0, i) + '0' + twos.substring(i + 1); } else { twos = twos.substring(0, i) + '1' + twos.substring(i + 1); pertrauka; } } // Jei nėra pertraukos : visi yra 1 kaip 111 arba 11111; // tokiu atveju pradžioje pridėkite papildomą 1 if (i == -1) { twos = '1' + twos; } System.out.println('1's papildymas: ' + vienetai);; System.out.println('2's papildymas: ' + du); } // Tvarkyklės kodas public static void main(String[] args) { String bin = '1100'; printOneAndTwosComplement(bin); } } // Šį kodą pateikė Rajput-Ji> |
Python3
# Python3 program to print 1's and 2's> # complement of a binary number> > # Returns '0' for '1' and '1' for '0'> def> flip(c):> > return> '1'> if> (c> => => '0'> )> else> '0'> > # Print 1's and 2's complement of> # binary number represented by 'bin'> def> printOneAndTwosComplement(> bin> ):> > > n> => len> (> bin> )> > ones> => ''> > twos> => ''> > > # for ones complement flip every bit> > for> i> in> range> (n):> > ones> +> => flip(> bin> [i])> > > # for two's complement go from right> > # to left in ones complement and if> > # we get 1 make, we make them 0 and> > # keep going left when we get first> > # 0, make that 1 and go out of loop> > ones> => list> (ones.strip(''))> > twos> => list> (ones)> > for> i> in> range> (n> -> 1> ,> -> 1> ,> -> 1> ):> > > if> (ones[i]> => => '1'> ):> > twos[i]> => '0'> > else> :> > twos[i]> => '1'> > break> > > i> -> => 1> > # If No break : all are 1 as in 111 or 11111> > # in such case, add extra 1 at beginning> > if> (i> => => -> 1> ):> > twos.insert(> 0> ,> '1'> )> > > print> (> '1's complement: '> ,> *> ones, sep> => '')> > print> (> '2's complement: '> ,> *> twos, sep> => '')> > # Driver Code> if> __name__> => => '__main__'> :> > bin> => '1100'> > printOneAndTwosComplement(> bin> .strip(''))> > # This code is contributed> # by SHUBHAMSINGH10> |
C#
// C# program to print 1's and 2's complement of> // a binary number> using> System;> > class> GFG> {> > > // Returns '0' for '1' and '1' for '0'> > static> char> flip(> char> c)> > {> > return> (c ==> '0'> ) ?> '1'> :> '0'> ;> > }> > > // Print 1's and 2's complement of binary number> > // represented by 'bin'> > static> void> printOneAndTwosComplement(String bin)> > {> > int> n = bin.Length;> > int> i;> > > String ones => ''> , twos => ''> ;> > ones = twos => ''> ;> > > // for ones complement flip every bit> > for> (i = 0; i { ones += flip(bin[i]); } // for two's complement go from right to left in // ones complement and if we get 1 make, we make // them 0 and keep going left when we get first // 0, make that 1 and go out of loop twos = ones; for (i = n - 1; i>= 0; i--) { if (vienes[i] == '1') { twos = twos.Substring(0, i) + '0' + twos.Substring(i + 1,twos.Length-( i+1)); } else { twos = twos.Substring(0, i) + '1' + twos.Substring(i + 1,twos.Length-(i+1)); pertrauka; } } // Jei nėra pertraukos : visi yra 1 kaip 111 arba 11111; // tokiu atveju pradžioje pridėkite papildomą 1 if (i == -1) { twos = '1' + twos; } Console.WriteLine('1's papildymas: ' + vienetai);; Console.WriteLine('2's papildymas: ' + du); } // Tvarkyklės kodas public static void Main(String[] args) { String bin = '1100'; printOneAndTwosComplement(bin); } } // Šį kodą pateikė 29AjayKumar> |
Javascript
> > // Javascript program to print 1's and 2's complement of> // a binary number> > // Returns '0' for '1' and '1' for '0'> function> flip (c) {> return> (c ==> '0'> )?> '1'> :> '0'> ;}> > // Print 1's and 2's complement of binary number> // represented by 'bin'> function> printOneAndTwosComplement(bin)> {> > var> n = bin.length;> > var> i;> > > var> ones, twos;> > ones = twos => ''> ;> > > // for ones complement flip every bit> > for> (i = 0; i ones += flip(bin[i]); // for two's complement go from right to left in // ones complement and if we get 1 make, we make // them 0 and keep going left when we get first // 0, make that 1 and go out of loop twos = ones; twos = twos.split('') for (i = n - 1; i>= 0; i--) { if (vieni[i] == '1') du[i] = '0'; else { twos[i] = '1'; pertrauka; } } twos = twos.join('') // Jei nėra pertraukos : visi yra 1 kaip 111 arba 11111; // tokiu atveju pradžioje pridėkite papildomą 1 if (i == -1) twos = '1' + twos; document.write( '1's papildymas: ' + vienetai + ' '); document.write( '2's papildymas: ' + du + ' '); } // Tvarkyklės programa var bin = '1100'; printOneAndTwosComplement(bin);>> |
>
Laiko sudėtingumas: O(n)
Pagalbinė erdvė: O(1)