2-е дополнение представления дробей? - PullRequest
3 голосов
/ 30 марта 2012

Я немного растерялся в этом.Мне нужно использовать два дробных бита 0.(a-1)(a-2)

Таким образом, теперь я могу использовать .00 .01 .10 и .11 Но мне также нужны отрицательные числа (в дополнении 2), поэтому .10 будет -.5?или это будет -.25?То же самое с .11, что будет -.75?или это будет -.5?Я почти уверен, что это будет первым в обоих случаях, но я не совсем уверен.

Ответы [ 3 ]

5 голосов
/ 30 марта 2012

В двоичной системе счисления все старшие значащие биты отрицательного числа установлены в 1. Предположим, вы храните эти числа как 8 бит, а 2 справа от «двоичной точки».

По определению x + -x = 0, поэтому мы можем написать:

0.5  +  -0.5 = 0.10 + 111111.10 = 0   // -0.5  = 111111.10
0.25 + -0.25 = 0.01 + 111111.11 = 0   // -0.25 = 111111.11
0.75 + -0.75 = 0.11 + 111111.01 = 0   // -0.75 = 111111.01

и т. Д.

Используя 8 бит, как это, наибольшее число, которое вы можете сохранить, составляет

* * 1010

наименее положительное число

000000.01 = 0.25

наименее отрицательное число

111111.11 = -0.25

и самый маленький (то есть самый отрицательный) равен

100000.00 = -32
1 голос
/ 30 марта 2012

посмотрим на это так:

у вас нормальное двоичное представление

давайте предположим 8-битные слова ...

первый бит (MSB) имеет значение 128,второй 64, и так далее ...

другими словами, первый бит (MSB) равен 2 ^ 7 ... второй бит равен 2 ^ 6 ... и последний бит равен 2 ^ 0

теперь мы можем предположить, что наше 8-битное слово имеет 2 десятичных знака ....

Теперь мы начинаем с первого бита (MSB) 2 ^ 5 и заканчиваем последним битом, имеющим 2 ^-2

никакой магии здесь ...

теперь, чтобы превратить это в двоичное дополнение: просто отрицайте значение первого бита

, чтобы вместо 2 ^ 5 это было быбыть -2 ^ 5

, поэтому база 10 -0,75 будет в двоичном дополнении
111111.01 ...
(1 * (- 32) + 1 * 16 + 1 * 8 + 1 * 4+ 1 * 2 + 1 * 1 + 0 * 0,5 + 1 * 0,25)
(1 * (- 2 ^ 5) + 1 * 2 ^ 4 + 1 * 2 ^ 3 + 1 * 2 ^ 2 + 1 *2 ^ 1 + 1 * 2 ^ 0 + 0 * 2 ^ (- 1) + 1 * 2 ^ (- 2))

0 голосов
/ 30 марта 2012

Число, хранящееся в дополнении до двух, инвертирует знак величины самого старшего бита (так, например, для 16-битного числа старший бит равен -32768, а не +32768). Все остальные биты ведут себя как обычно. Следовательно, при выполнении математических операций для многословных чисел верхнее слово каждого числа следует рассматривать как дополнение к двум (поскольку его самый верхний бит будет самым старшим битом общего числа), но все остальные слова в каждом числе должны рассматриваться в количестве без знака.

Например, 16-битный номер дополнения до двух имеет значения места (-32768, 16384, 8192, 4096, 2048, 1024, 512, 256, 128, 64, 32, 16, 8, 4, 2 и 1 ). Разделенные на две 8-битные части, эти части будут иметь значения мест (-32768, 16384, 8192, 4096, 2048, 1024, 512 и 256); и (128, 64, 32, 16, 8, 4, 2 и 1). Первый набор значений состоит из 8-битного числа, дополненного двумя, умноженного на 256; последний набор представляет собой 8-разрядное число без знака.

...