представление числа



Автор ****** задал вопрос в разделе Другие языки и технологии

Помогите получить двоичную форму внутреннего представления числа 16,8125 (в 4- х байтовой ячейке) и получил лучший ответ

Ответ от Миоко Таканава[гуру]
И каким должно быть это внутреннее представление: с фиксированной точкой или с плавающей?
В обоих случаях сначала нужно получить двоичное представление числа. Перевод осуществляется отдельно для целой и дробной частей. Для целой нужно последовательно делить 16 на 2 пока частное не станет равно нулю, и выписывать целые части от деления и остатки:
16 / 2 = 8 остаток 0
8 / 2 = 4 остаток 0
4 / 2 = 2 остаток 0
2 / 2 = 1 остаток 0
1 / 2 = 0 остаток 1
Теперь остатки записываются снизу вверх: 10000 – двоичное представление целой части.
(Это можно и в уме сделать 16(10)=10000(2)).
Для дробной части нужно последовательно умножать на 2, выписывать целые части. Затем брать дробную часть и снова умножать пока не останется 0 или пока не надоест.
0,8125 * 2 = 1,625 целая часть 1
0,625 * 2 = 1,25 целая 1
0,25 * 2 = 0,5 целая 0
0,5 * 2 = 1,0 целая 1
Теперь целые части записываются сверху вниз после запятой: 0,1101 – двоичное представление дробной части. После объединения целой и дробной частей получается двоичное представление исходного числа: 16,8125(10) = 10000,1101(2).
Если представление с фиксированной точкой, то нужно знать, где находится запятая. Вы этого не указали. Предположим, что запятая находится посередине этих 4-х байт, тогда число запишется как 0000000000010000,1101000000000000. Если разбить по байтам, то:
00000000 00010000 11010000 00000000 (00 10 D0 00 в 16-ричном виде) .
В памяти число будет располагаться так: 00000000 11010000 00010000 00000000 или в шестнадцатеричном виде 00 D0 10 00.
Глава 2. Если нужно представление с плавающей точкой.
Так как ничего не написано о способах представления мантиссы и порядка, предположим, что имеется в виду стандартный согласно IEEE 754 формат Single длиной 4 байта.
Single имеет следующие поля: s(1 разряд) e(8 разрядов) m(23 разряда) , где
s – знак числа (0 – положительное, 1 – отрицательное) ;
e – характеристика (другие названия экспонента, порядок с избытком)
m – нормализованная мантисса без целой части.
Число положительное, значит s = 0.
Далее нужно нормализовать мантиссу. Для этого нужно запятую в числе сдвинуть влево так, чтобы слева от неё осталась только одна единица: 10000,1101 -> 1,00001101. Сдвинута на 4 разряда.
Получаем экспоненту. Для этого нужно к количеству разрядов, на которое была сдвинута запятая, прибавить смещение порядка (для single это 127):
127 + 4 = 131. В двоичном представлении это 10000011 (перевод целых чисел см. выше) .
Мантисса хранится без целой части. В 23 разрядах она будет представлена как 00001101000000000000000.
Все поля получены, теперь можно собрать всё вместе:
01000001100001101000000000000000 – это двоичное представление исходного числа с плавающей точкой.
Если разбить по байтам: 01000001 10000110 10000000 00000000 (41 86 80 00 в шестнадцатеричном виде) .
В памяти это число будет храниться так: 00000000 10000000 10000110 01000001 (00 80 86 41 в 16-ричном представлении).Источник:

Ответ от 3 ответа[гуру]
Привет! Вот подборка тем с похожими вопросами и ответами на Ваш вопрос: Помогите получить двоичную форму внутреннего представления числа 16,8125 (в 4- х байтовой ячейке)
 

Ответить на вопрос:

Имя*

E-mail:*

Текст ответа:*
Проверочный код(введите 22):*