logo

Доповнення 1 і 2 до двійкового числа

Дано двійкове число у вигляді рядка, виведіть його доповнення до 1 і 2.

1 доповнення двійкового числа — це інше двійкове число, отримане перемиканням усіх бітів у ньому, тобто перетворенням біта 0 на 1 і біта 1 на 0. У форматі доповнення до 1 додатні числа залишаються незмінними. Від’ємні числа отримують шляхом доповнення до 1 позитивних відповідників.



наприклад, +9 буде представлено як 00001001 у восьмибітній нотації, а -9 буде представлено як 11110110, що є доповненням до 1 до 00001001.

приклади:

1's complement of '0111' is '1000' 1's complement of '1100' is '0011'>

2 доповнення двійкового числа дорівнює 1, доданому до доповнення до 1 двійкового числа. У представленні двійкових чисел у доповненні до двох, MSB представляє знак із «0», який використовується як знак плюс, і «1», який використовується як знак мінус. інші біти використовуються для представлення величини. додатні величини представлені таким же чином, як у випадку знакового біта або доповнення до 1. Від’ємні величини представлені доповненням 2 до своїх позитивних відповідників.



приклади:

пов'язаний список у java
2's complement of '0111' is '1001' 2's complement of '1100' is '0100'>

Ще один трюк для пошуку доповнення двох:

Крок 1: Почніть з найменшого значущого біта та переходьте ліворуч, поки не знайдете 1. Поки не знайдете 1, біти залишаються незмінними

Крок 2: Як тільки ви знайшли 1, залиште 1 як є, і зараз



крок 3: Переверніть усі біти, що залишилися, на 1.

Ілюстрація

Припустімо, нам потрібно знайти 2s доповнення до 100100

Крок 1: Перейдіть і нехай біт залишається незмінним, поки не знайдете 1. Тут x ще невідомий. Відповідь = xxxx00 –

Крок 2 : Ви знайшли 1. Нехай так і залишиться. Відповідь = xxx100

крок 3: Переверніть усі біти, що залишилися, на 1. Відповідь = 011100.

Отже, доповнення 2s до 100100 дорівнює 011100.

Рекомендована практика 1 Доповнення Спробуйте!

Для доповнення нам просто потрібно перевернути всі біти.
Для доповнення до 2 ми спочатку знаходимо доповнення до одиниці. Ми обходимо доповнення до одиниці, починаючи з LSB (молодшого значущого біта), і шукаємо 0. Ми повертаємо всі 1 (змінюємо на 0), доки не знаходимо 0. Нарешті, ми повертаємо знайдений 0. Наприклад, доповнення 2 до 01000 є 11000 (Зверніть увагу, що спочатку ми знаходимо доповнення до 01000 як 10111). Якщо є всі 1 (в одному доповненні), ми додаємо додаткову 1 у рядок. Наприклад, доповнення до 2 до 000 дорівнює 1000 (доповнення до 1 до 000 дорівнює 111).

Нижче наведено реалізацію.

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 (ones[i] == '1') twos[i] = '0'; else { twos[i] = '1'; перерва; } } // Якщо немає розриву: усі 1, як у 111 або 11111; // у такому випадку додати додаткову 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 (ones.charAt(i) == '1') { twos = twos.substring(0, i) + '0' + twos.substring(i + 1); } else { twos = twos.substring(0, i) + '1' + twos.substring(i + 1); перерва; } } // Якщо немає розриву: усі 1, як у 111 або 11111; // у такому випадку додати додаткову 1 на початку if (i == -1) { twos = '1' + twos; } System.out.println('1's complement: ' + ones);; System.out.println('2's доповнення: ' + двійки); } // Код драйвера public static void main(String[] args) { String bin = '1100'; printOneAndTwosComplement(bin); } } // Цей код надав 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 (ones[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)); перерва; } } // Якщо немає розриву: усі 1, як у 111 або 11111; // у такому випадку додати додаткову 1 на початку if (i == -1) { twos = '1' + twos; } Console.WriteLine('1's complement: ' + ones);; Console.WriteLine('2's доповнення: ' + двійки); } // Код драйвера public static void Main(String[] args) { String bin = '1100'; printOneAndTwosComplement(bin); } } // Цей код надав 29AjayKumar>

>

str.replace в java

>

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 (ones[i] == '1') twos[i] = '0'; else { twos[i] = '1'; перерва; } } twos = twos.join('') // Якщо немає розриву: усі 1, як у 111 або 11111; // у такому випадку додати додаткову 1 на початку if (i == -1) twos = '1' + twos; document.write( '1's доповнення: ' + одиниці + ' '); document.write( '2's доповнення: ' + двійки + ' '); } // Програма драйвера var bin = '1100'; printOneAndTwosComplement(bin);>

>

>

Вихід:

1's complement: 0011 2's complement: 0100>

Часова складність: O(n)

Допоміжний простір: О(1)