Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Отрицательные числа в 2,10,16 системе счисления.

ЕВГЕНИЙ ЕВГЕНИЙ Знаток (407), закрыт 5 лет назад
Есть числа:
x1-1867 (10чная)
x2-1245 (10чная)
x3-2649 (10чная)
из них нужно сделать двоичную
x1-0000 0111 0100 1011
x2-0000 0100 1101 1101
x3-0000 1010 0101 1001
и 16чную
x1-074B
x2-04DD
x3-0A59
А ВОТ ДАЛЕЕ НАЧИНАЮТСЯ СЛОЖНОСТИ.
нужно сделать
-x1
-x2
-x3
то есть сделать их отрицательными. С двоичной системой я вроде бы разобрался, берём число, инвертируем его (0=1, 1=0) и после в конец прибавляем 1. Вышло так:
-x1-1111 1000 1011 0101
-x2-1111 1011 0010 0011
-x3-1111 0101 1010 0111
но вот я не уверен что правильно сделал и как теперь сделать всё то же но и для 16ричной и 10чной системы, ведь если через калькулятор перевести например -x1 1111 1000 1011 0101 в 10чную, получится 63669 (это и не отрицательное число совсем и на (1867 но с минусом не похоже [а должно?])
(на фото всё лучше видно и так же там есть ниже не заполенные поля, их тоже не знаю как делать, особенно модуль
Лучший ответ
クマのプーさん Мудрец (15505) 5 лет назад
в 16 записи -x1 ошибка в последней цифре. Там не 9, а 5
Отрицательные числа тривиально проверяются сложением с собой
x1+(-x1) = 0x074b + 0xf8b5 = 0x10000
то есть переполнение четырёх цифр и вылет единицы в пятый разряд
ЕВГЕНИЙ ЕВГЕНИЙЗнаток (407) 5 лет назад
Да! и правда ошибка, спасибо. Про сложение с 16 ричными и 2 ичными я понял, вот даже.. 074B+F8B5 получится 10000..но с 10 десятичными как быть?
クマのプーさん Мудрец (15505) А никак. Там ноль получается за счёт "обрезания" разрядов. А это имеет смысл только в двоичной / шестнадцатиричной системе. То есть можем так же сложить два числа и убедиться, что результат равен 0x10000 = 65536 (для 32-битного варианта)
Остальные ответы
Аглая Шниц Искусственный Интеллект (147794) 5 лет назад
дополнительный код для числа N в данном случае - это (2^16-1) - N
то есть, чтобы 0000 0111 0100 1011 (1867) перевести в дополнительный код, нужно вычесть:
1111 1111 1111 1111(65535) - 0000 0111 0100 1011(1867) = 1111 1000 1011 0100(63668)
Похожие вопросы