2 дополняют двоичный ожидаемый результат - PullRequest
0 голосов
/ 26 сентября 2019

Я готовлюсь к экзамену и хотел бы проверить свои ответы на этот вопрос:

Предположим, что двоичные значения представляют собой 8-битные значения со знаком, представляющие формат с двойным дополнением и десятичный диапазон от -От 128 до 127. Какие из следующих утверждений являются истинными / ложными?

1) 11111111> 0111111

Я думаю, что это неверно, поскольку первая цифра представляет знак, поэтому мы сравниваемОт отрицательного значения до положительного.

2) (11111111 + 11111111)> (00000001 - 00000010)

Я не уверен в этом, потому что не знаю, что происходит, когдаэто переполняется.Я думаю, что компьютер просто сбрасывает последнюю цифру.Поэтому я думаю, что левая сторона как -128 - 128 = -256.Тогда правая часть равна 1 - 2 = -1, что представлено как 1000001. Это означает, что неравенство в десятичном виде становится -256> -1, что неверно.Но опять же, я не уверен в этом.

3) (10000000/00000100) == 11100000

Первая часть -0/4, а вторая ненулевая, поэтому будет ли она ложной?


Кроме того, есть только примеры проблем, и я хотел бы попрактиковаться / изучить самостоятельно.Есть ли способ, которым я могу написать программу на C ++, чтобы увидеть ожидаемый результат вопросов этой формы?

Спасибо.

1 Ответ

0 голосов
/ 27 сентября 2019

Что касается игры с этим в C ++, существует множество библиотек битовых манипуляций (просто поиск "C ++ bit манипулятивной библиотеки" даст много результатов).В качестве нескольких примеров:

  1. https://github.com/Chris--A/BitBool
  2. https://www.slac.stanford.edu/comp/unix/gnu-info/libg++_23.html

Вы можете или не можете найти тот, который имеет встроенное понятиедва дополнения.Независимо от этого, для вас может оказаться полезным реализовать такую ​​функциональность поверх того, что предоставляет одна из этих библиотек, например, путем создания подкласса того, что они предоставляют, или написания собственного класса, инкапсулирующего существующую реализацию библиотеки в качестве члена данных.

...