Бинарный 2-х дополнения - PullRequest
0 голосов
/ 25 февраля 2019

Я столкнулся с проблемой.когда мы хотим вычесть число из другого, используя дополнение 2, мы можем это сделать.Я не знаю, как вычесть дробное число, используя дополнение 2.

5 is in binary form 101 and 2 is 10. if we want to subtract 2 from 5 we need to find out 2's complement of 2 2's complement of 2-> 11111110

, поэтому, если мы теперь добавим двоичное число 5, мы сможем получить результат вычитания.Если я хочу получить результат 5,5-2,125.какая будет процедура.

1 Ответ

0 голосов
/ 25 февраля 2019

Можно использовать номера с фиксированной точкой, и все еще часто можно найти их во встроенном коде или оборудовании.

Их использование идентично целым числам, но вам нужно указать, где находится ваша «точка».Например, предположим, что вам нужно 3 бита после точки и что ваши данные имеют размер 8 бит, биты 7..3 - это целая часть (слева от «точки»), а биты 2..0 - дробная часть.Интерпретация целочисленной части, как обычно, представляет собой двоичное разложение этого целого числа: биты 3 соответствуют 2 0 , биты 4 - 2 1 и т. Д.

Длядробная часть, разложение в отрицательных степенях или два.биты 2 соответствуют 2 -1 , биты 1 - 2 -2 и биты 0 - 2 -3 .

Так что для вас проблема, 5.5 = 4 + 1 + 1/2 = 2 2 + 2 0 + 2 -1 и его код 00101 (.) 100.Точно так же 2,125 = 2 + 1/8 и его код 00010 (.) 001 (примечание (.) - всего лишь помощь в понимании кодирования).

На самом деле они просто целые числа, но вы должны учитывать, что все ваши числа умножены на 2 -3 .Это не повлияет на сложение, но результаты умножения и деления должны быть скорректированы.Принятие во внимание положения точки и управление переполнением и недостаточным количеством является сложностью арифметики с фиксированной точкой, но она позволяет выполнять дробные вычисления, даже если ваше оборудование не обеспечивает поддержку с плавающей запятой (например, с микроконтроллерами низкого уровня или системами FPGA).

Два дополнения похожи на целые числа, и его вычисления идентичны.Если код 2.125 равен 00010 (.) 001, то -2.125 == 11101 (.) 111.Операции как обычно.

+5     00101(.)100
-2.125 11101(.)111
       00011(.)011

и 00011 (.) 011 = 2 + 1 + 1/4 + 1/8 = 3375

Для записи первое использование в двух дополнениях было для дробных чисел с фиксированной запятой идва дополнения имя происходит от этого.Если дробное число, если оно представлено, скажем, 0 (.) 1100000 (0,75), его отрицательная противоположная часть будет 1 (.) 0100000 (-0,75 или 1,25, если интерпретируется как без знака), и мы всегда имеем x + (без знака) -x =2.Для этого кодирования отрицательное значение дробного числа x - это число y, которое должно быть добавлено к x, чтобы получить 2, отсюда и название того, что y является дополнением 2 к x.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...