12 / 12 / 4
Регистрация: 13.10.2012
Сообщений: 279
|
|
Сложение двоичных чисел в дополнительном коде04.12.2012, 17:19. Показов 16260. Ответов 1
Метки нет Все метки)
(
0
|
04.12.2012, 17:19 | |
Ответы с готовыми решениями:
1
Сложение чисел в дополнительном коде
Сложение двоичных чисел с фиксированной запятой |
Модератор
10221 / 5509 / 3371
Регистрация: 17.08.2012
Сообщений: 16,851
|
||||||||||||||||||||||||||
06.12.2012, 05:38 | ||||||||||||||||||||||||||
Перевод неверный. Разряды не с той стороны переписал в целой части. Дробная часть верно, там бесконечная периодическая дробь.
Для перевода из одной системы (исходной) в другую (целевую) систему счисления надо просто разделить целю часть числа на основание системы счисления нацело, пока делится, и "собрать" остатки от деления начиная с последнего, а дробную - умножить на основание системы счисления и собрать получившиеся переполнения (целые части), начиная с первого. Делить и умножать надо по правилам исходной системы счисления; естественно, основание целевой системы счисления необходимо представлять как число исходной системы счисления, а результат - в целевой системе счисления. Дополнительный код имеет смысл только в числах с фиксированной разрядностью. Самый старший разряд числа в этом случае представляет из себя знак числа. Ноль - число положительное, единица - отрицательное. Положительное число в дополнительном коде (если, конечно, оно помещается в фиксированное число разрядов минус один разряд на знак) записывается точно так же, как и в прямом коде. Дополнительный код отрицательного числа можно получить двумя способами: 1) проинвертировать все разряды модуля числа и сложить его с положительным числом, у которого только самый младший разряд равен 1, перенос из старшего разряда не сохранять; 2) вычесть из нуля модуль этого отрицательного числа, заём из самого старшего разряда не сохранять. Видно, что челые части Ваших чисел не помещаются в один байт (-128..+127). Следовательно, под целую часть необходимо использовать минимум два байта, либо такое количество разрядов, чтобы в них помещались любое из этих чисел и результат. В Вашем случае достаточно 9 битов под целую часть, а под дробную часть - в зависимости от ошибки округления. Для представления с точностью до одного десятичного разряда после десятичной точки достаточно 5 битов после двоичной точки, а с точностью до двух десятичных разрядов - 8 битов. Кстати, почему? Я бы предложил использовать двоичные числа с фиксированной точкой и отвести два байта под целую часть и два байта под дробную часть. Итак. переводим 201:
0000 0000 1100 1001.0000 0000 0000 0000 это +201 1111 1111 0011 0110.1111 1111 1111 1111 инверсия + 0000 0000 0000 0000.0000 0000 0000 0001 + вот это, перенос последний - не учитываем --------------------------------------- 1111 1111 0011 0111.0000 0000 0000 0000 дополнительный код 0000 0000 0000 0000.0000 0000 0000 0000 ноль - 0000 0000 1100 1001.0000 0000 0000 0000 вычитаем 201, о заёме из несуществующего разряда забываем --------------------------------------- 1111 1111 0011 0111.0000 0000 0000 0000 дополнительный код Проверяем. 1111 1111 0011 0111.0000 0000 0000 0000 это -201 в доп. коде 0000 0000 1100 1001.0000 0000 0000 0000 это +201, складываем, перенос последний - игнорируем 0000 0000 0000 0000.0000 0000 0000 0000 ясен пень, (-201)+(+201)=0, значит, всё правильно. Теперь переводим 189.8: Целая честь:
Дробная часть:
Складываем целую и дробную часть. Получаем: 189.810 = 10111101.(1100)2. Переписываем в нашем формате, округляем: 0000 0000 1011 1101.1100 1100 1100 1100 Осталось сложить. 1111 1111 0011 0111.0000 0000 0000 0000 это -201 + 0000 0000 1011 1101.1100 1100 1100 1100 это примерно 189.8 --------------------------------------- 1111 1111 1111 0100.1100 1100 1100 1100 сумма. Проверяем. Переводим из дополнительного кода в подожительное число: 0000 0000 0000 0000.0000 0000 0000 0000 это ноль - 1111 1111 1111 0100.1100 1100 1100 1100 вычитаем сумму из нуля, заём - в пропасть --------------------------------------- 0000 0000 0000 1011.0011 0011 0011 0100 какое-то число, переводим из двоичной формы в десятичную: Целая часть:
Дробная часть:
Вообще-то достаточно было перевести с точностью до второго знака и округлить. Складываем целую и дробную часть: 11.200012041406250. Вообще-то должно было получиться 11.2, но ничего, это тоже очень похоже на правду. Неточность возникла из-за ошибки округления. Вот, в кратце, и всё решение. Совет на будующее: пытайтесь понять в первую очередь принцип, чтобы потом всегда можно было понять какой-либо частный случай. Задание, вообще-то, простенькое. Всего Вам доброго. Добавлено через 11 минут Ой, зря я так нехорошо о переводе... Перевели Вы всё правильно, только первое число почему-то не представили в дополнительном коде, а приписали ему знак спереди (1).
1
|
06.12.2012, 05:38 | |
Помогаю со студенческими работами здесь
2
Сложение двоичных чисел с плавающей точкой Сложение двоичных чисел в дополнительном коде
Сложение (вычитание) двоичных чисел в дополнительном коде Умножение двоичных чисел в дополнительном коде Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Опции темы | |
|
Новые блоги и статьи
![]() |
||||
Исключения в Java: советы, примеры кода и многое другое
Javaican 18.05.2025
Исключения — это объекты, созданные когда программа сталкивается с непредвиденной ситуацией: файл не найден, сетевое соединение разорвано, деление на ноль. . . Список можно продолжать до бесконечности. . . .
|
Как сделать SSO (Single Sign-On) в C# приложении
stackOverflow 18.05.2025
SSO — это механизм, позволяющий пользователю пройти аутентификацию один раз и получить доступ к нескольким приложениям без повторного ввода учетных данных. Вы наверняка сталкивались с ним, когда. . .
|
Kubernetes с Apache Flink для обработки данных в реальном времени
Mr. Docker 17.05.2025
Kubernetes — это целая философия управления распределёнными приложениями. В отличие от "примитивных" решений вроде Docker Swarm, K8s (как его ласково называют в тусовке DevOps-инженеров) предлагает. . .
|
Использование декораторов в Python
py-thonny 17.05.2025
Если вы когда-нибудь задумывались о том, как красиво расширить функциональность кода без лишней возни и дублирования, декораторы в Python — та самая волшебная палочка, которую вы искали. По сути, это. . .
|
Реализация многопоточных сетевых серверов на Python
py-thonny 16.05.2025
Когда сталкиваешься с необходимостью писать высоконагруженные сетевые сервисы, выбор технологии имеет критическое значение. Python, со своей элегантностью и высоким уровнем абстракции, может. . .
|
C# и IoT: разработка Edge приложений с .NET и Azure IoT
UnmanagedCoder 16.05.2025
Мир меняется прямо на наших глазах, и интернет вещей (IoT) — один из главных катализаторов этих перемен. Если всего десять лет назад концепция "умных" устройств вызывала скептические улыбки, то. . .
|
Гибридные квантово-классические вычисления: Примеры оптимизации
EggHead 16.05.2025
Гибридные квантово-классические вычисления — это настоящий прорыв в подходах к решению сложнейших вычислительных задач. Представьте себе союз двух разных миров: классические компьютеры, с их. . .
|
Использование вебсокетов в приложениях Java с Netty
Javaican 16.05.2025
HTTP, краеугольный камень интернета, изначально был спроектирован для передачи гипертекста с минимальной интерактивностью. Его главный недостаток в контексте современных приложений — это. . .
|
Реализация операторов Kubernetes
Mr. Docker 16.05.2025
Концепция операторов Kubernetes зародилась в недрах компании CoreOS (позже купленной Red Hat), когда команда инженеров искала способ автоматизировать управление распределёнными базами данных в. . .
|
Отражение в C# и динамическое управление типами
stackOverflow 16.05.2025
Reflection API в . NET — это набор классов и интерфейсов в пространстве имён System. Reflection, который позволяет исследовать и манипулировать типами, методами, свойствами и другими элементами. . .
|