| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Разные вопросы > двоичный код |
| Автор: 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 бита.
перевод из 2's complement в десятиричную систему: -16. |
| Автор: Krol01 6.12.2009, 16:02 |
| bilbobagginz, Спасибо, теперь разобрался |