2012-03-30 2 views
3

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

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

+2

PS +1 для «положительного» каламбура. :-) –

ответ

5

В примечании о дополнении двух всех наиболее значимых бит отрицательного числа установлены равны 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 
+1

Спасибо, это было самое близкое, но я это точно выяснил ... '00 => 0 => 0/4 => 0 01 => 1 => 1/4 => 25 10 => - 2 => - 2/4 => -. 5 11 => - 1 => - 1/4 => -. –

0

Число, сохраненное в дополнении 2, инвертирует знак наивысшей величины бита (так что, например, 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-битное число без знака.

+1

Спасибо ... но это совсем не помогает ... –

+0

Если ваш номер был неподписанным, ваши биты будут иметь значения (+1/2) и (+1/4). Для формата с двумя дополнениями переверните знак верхнего бита, так что они (-1/2) и (+1/4). Доступными значениями являются 0, 1/4, -1/2 и -1/4. – supercat

1

видеть его таким образом:

у вас есть нормальный бинарное представление

давайте предположим, что 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))

Смежные вопросы