#bit-manipulation #interrupt #logical-operators #bit-shift #xor
#битовые манипуляции #прерывание #логические операторы #битовый сдвиг #xor
Вопрос:
Потратив значительное количество времени на поиск в этой теме, я все еще пытаюсь уверенно ответить на следующие два вопроса:
- Определите процесс, используя логические операторы для нормализации числа с плавающей запятой.
- Прерывания из различных источников хранятся в виде битов в двоичном значении. Как можно использовать логические операции для определения того, было ли сгенерировано конкретное прерывание?
Когда дело доходит до вопроса 1, давайте возьмем, например, число 17, хранящееся в 8 битах (00010001).
Мое первоначальное предположение заключалось в том, что мы просто сдвигаем его влево на 2 места. Но что тогда происходит с показателем степени? Используем ли мы просто use XOR для увеличения / уменьшения его на нужную величину? Я не уверен, как подойти к этому вопросу.
Что касается второго, я просто потерялся. Сначала я подумал, что они могут иметь в виду маскировку прерываний, но, насколько я понимаю, эта функция используется для временной приостановки прерывания, а не для его идентификации.
Не мог бы кто-нибудь указать мне правильное направление? Заранее благодарю вас за ваше время и помощь.
Комментарии:
1. Вероятно, лучше задавать отдельные вопросы в отдельных сообщениях.
2. Для первого вам действительно нужно добавить 2 к показателю. Из вопроса неясно, ожидают ли они, что вы по существу напишете сумматор для выполнения сложения, используя только логические операторы, или что; Я бы попросил того, кто задал вопрос, уточнить. Но детали будут зависеть от точного формата с плавающей запятой, который вы используете, который не был указан. В некоторых у вас может быть неявное ведущее значение 1, поэтому 17 = 1.0001 x 2 ^ 4 будет кодироваться с помощью мантиссы
00010000
и показателя степени 4.3. Я думаю, что второй просто спрашивает вас, как проверить, установлен ли определенный бит, т. Е. С Использованием И с маской.
4. Re: Вопрос 1, я изо всех сил пытаюсь понять, что происходит с двоичной точкой при выполнении двоичного сдвига. Если мы возьмем, например, число 1.75, представленное как 000001.11 в 8 битах. Если я сдвину его вправо, я потеряю единицы. Если я сдвину его влево, как компьютер узнает, куда поместить двоичную точку?
5. Куда идет двоичная точка, указывается как часть формата с плавающей запятой, который вы опять же не указали, поэтому мы не можем знать наверняка. Но обычно, например, в формате IEEE 754 , мантисса кодируется неявным «1». слева от нее, т. Е. Двоичная точка всегда находится в крайнем левом углу, с «скрытым» 1 битом с другой стороны от нее. Таким образом, вы сдвигаете влево на 6 бит, чтобы сделать
11000000
, что понимается как1.11000000
, и0
в этом случае вам понадобится показатель степени.