2-х дополнительное представление дробей?

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

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


person Tropical_Peach    schedule 30.03.2012    source источник
comment
P.S. +1 за положительный каламбур. :-)   -  person Adam Liss    schedule 30.03.2012


Ответы (3)


В записи с дополнением до двух все старшие значащие биты отрицательного числа устанавливаются в 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 бит, максимальное число, которое вы можете сохранить, равно

011111.11 = 31.75

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

000000.01 = 0.25

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

111111.11 = -0.25

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

100000.00 = -32
person Adam Liss    schedule 30.03.2012
comment
Спасибо, это было ближе всего, но я на самом деле понял... 00=>0=>0/4=>0 01=>1=>1/4=>.25 10=>-2=>-2/4=>-.5 11=>-1=>-1/4=>-.25 - person Tropical_Peach; 30.03.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))

person DarkSquirrel42    schedule 30.03.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-битное число без знака.

person supercat    schedule 30.03.2012
comment
Если бы ваш номер был беззнаковым, ваши биты имели бы значения (+1/2) и (+1/4). Для формата с дополнением до двух поменяйте знак старшего бита, чтобы они были (-1/2) и (+1/4). Тогда доступны значения 0, 1/4, -1/2 и -1/4. - person supercat; 30.03.2012