2016-12-23 1 views
0

Я написал программу, чтобы распечатать битовую комбинацию ряда поплавка в С.поплавковый бит в памяти по-разному по сравнению с IEEE-754?

Так что я ожидал получить стандартный-IEEE-754 двоичных разрядов т.е .: 1 знаковый бит | 8 бит EXP | 23 mantissa bits

Когда я получил результат и положил результат в преобразователь IEEE-754, это число было неправильным. Когда я немного поменял порядок, число было правильным.

Так почему я спрашиваю: я нашел нить, в которой я узнал, что шаблон может быть BYTE-WISE отменен, но нигде я не нашел его полностью BIT-WISE в обратном порядке.

Может ли кто-нибудь наклеить на это, пожалуйста?

Вот скриншот программы, результат и результат преобразования. (Как вы можете видеть, что я поставил цифры в конвертер в обратном порядке, и результат выглядит хорошо для меня.)

Screenshot

ответ

4

Порядок байтов не является проблемой здесь, так как вы используете сдвиг бит оператора на значение всего объекта.

Вы просто распечатываете биты в обратном порядке, нет ничего более.

Сначала вы начинаете печатать младшие значащие биты, а веб-страница начинается с наиболее значимых бит. Оба варианта верны.


Один боковой узел, как вы интерпретировать поплавок как межд не является правильным, и это приводит к неопределенному поведению. Вы должны использовать целое число без знака с его шириной равной или большей ширине типа float и использовать memcpy.

+0

Я думаю, что я искал шаблон и память неправильно. поэтому, если перейти на какой-то адрес, я просто начинаю с него в LSB, и, переходя через него, я перехожу от бит 0 до бит 32, верно? Я думаю, что меня смутило «нормальное направление чтения» и что 754-шаблон начинается с самого левого с его MSB ... Спасибо. – Ben

+0

Единственное, что я делаю с целым, это сохранить исходный адрес флота, а не неправильно интерпретировать поплавок, не так ли? – Ben

+0

@Ben Вам не разрешено делать это в C. Типы int и float несовместимы. Вы должны использовать тип символа или memcpy для нового объекта. – 2501

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