Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Разные вопросы > двоичный код


Автор: Krol01 6.12.2009, 13:40
Добрый день.
Нужна помощь по сложению чисел в двоичном коде. В общем то проблема состоит в сложении отрицательных чисел. На сколько я понял, то отрицательное переводится в дополнительный код, но самой сути как это делать не понял. Поискал в гугле, но там все размыто, запутался еще больше :(

Нужно сложить два числа: 16+ (-32). 
16 =10000, 32 =100000. А вот выразить число -32 затрудняюсь. 
Если не трудно, то распишите все от и до как делать, буду очень благодарен.

Автор: bars80080 6.12.2009, 13:52
а на каком языке вам это нужно?

потому что на бумажке, это так и выглядит: 10000 - 100000 = -10000

Автор: Krol01 6.12.2009, 14:19
ну как бы для перевода отрицательного числа в двоичный код необходимо перевести его в дополнительный...вот я и спрашивал как это сделать.

Автор: bilbobagginz 6.12.2009, 15:24
Krol01, существует 2 основных вида хранения отрицательных двоичных чисел - 
"1's complement" - дополнение до 1-го (Когда отрицательные числа - это логический NOT относительно положительных)
"2's complement" - дополнение до 2-х (когда отрицательные числа - это сначала делается NOT, а потом добавляется 1)
перевод из 2's compl. обратно делается в том же порядке - отрицательному числу делается NOT и добавляется 1, и результат - величина ортицательного числа предсавленного нам.

выбрав метод "дополнение до 2-х":
нужно понимать, что есть 2 пути работы - когда ты знаешь диапазон чисел, и когда не знаешь.
путь 1 (не зная диапазон)
то у отрицательных числе, без обозначения ширины самая главная цифра определяет значение всех цифр левее её.
т.е. если число положительное - у него слева будет 0. а отрицательное - 1.
т.е. если число положительное - его пишут так
х=010000
а то же отрицательное ( (!х)+1 )
101111+1=110000 (самая левая единца - это место начиная с к-рого идут влево только единицы ...111111110000)
-х=110000
теперь сложение:
   х+-х=010000+110000=0
---
путь 2 (если ты ЗНАЕШЬ, в каком диапазоне работаешь)
у любого числа (которое можно представить при помощи данной ширины)
есть ширина, напр. у интел процессоров для целых чисел (signed int) используется 32 бита.
Код

 16 = 0000 0000 0000 0000 0000 0000 0001 0000
-32 = 1111 1111 1111 1111 1111 1111 1110 0000
      ---------------------------------------
      1111 1111 1111 1111 1111 1111 1111 0000

перевод из 2's complement в десятиричную систему: -16.

Автор: Krol01 6.12.2009, 16:02
bilbobagginz, Спасибо, теперь разобрался  smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)