Побитовые операторы для нормализации чисел с плавающей запятой и идентификации прерываний

#bit-manipulation #interrupt #logical-operators #bit-shift #xor

#битовые манипуляции #прерывание #логические операторы #битовый сдвиг #xor

Вопрос:

Потратив значительное количество времени на поиск в этой теме, я все еще пытаюсь уверенно ответить на следующие два вопроса:

  1. Определите процесс, используя логические операторы для нормализации числа с плавающей запятой.
  2. Прерывания из различных источников хранятся в виде битов в двоичном значении. Как можно использовать логические операции для определения того, было ли сгенерировано конкретное прерывание?

Когда дело доходит до вопроса 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 в этом случае вам понадобится показатель степени.