Как отобразить двоичное представление с плавающей или двойной? - PullRequest
38 голосов
/ 29 декабря 2008

Я хотел бы отобразить двоичное (или шестнадцатеричное) представление числа с плавающей запятой. Я знаю, как конвертировать вручную (используя метод здесь ), но мне интересно видеть примеры кода, которые делают то же самое.

Хотя я особенно заинтересован в решениях C ++ и Java, мне интересно, если какие-либо языки делают это особенно легко, поэтому я делаю этот язык независимым . Я хотел бы увидеть некоторые решения на других языках.

РЕДАКТИРОВАТЬ: Я получил хорошее освещение C, C ++, C # и Java. Есть ли какие-нибудь гуру альтернативного языка, которые хотят добавить в список?

Ответы [ 13 ]

2 голосов
/ 11 апреля 2012

Вы можете легко преобразовать переменную с плавающей запятой в переменную int (или удвоить в длину), используя такой код в C #:

float f = ...;   
unsafe
{
    int i = *(int*)&f;
}
0 голосов
/ 10 августа 2018

Для дальнейшего использования, C ++ 2a представляет новый шаблон функции bit_cast, который выполняет эту работу.

template< class To, class From >
constexpr To bit_cast(const From& from) noexcept;

Мы можем просто позвонить,

float f = 3.14;
std::bit_cast<int>(f);

Подробнее см. https://en.cppreference.com/w/cpp/numeric/bit_cast

0 голосов
/ 29 декабря 2008

В C ++ вы можете показать двоичное представление следующим образом:

template <class T>
std::bitset<sizeof(T)*8> binary_representation(const T& f)
{
   typedef unsigned long TempType;
   assert(sizeof(T)<=sizeof(TempType));
   return std::bitset<sizeof(T)*8>(*(reinterpret_cast<const TempType*>(&f)));
}

ограничение здесь связано с тем, что параметр bitset long является длинным без знака, так что он работает до плавающего, вы можете использовать что-то еще, кроме bitset и это утверждают.

Кстати, предложение cletus терпит неудачу в том смысле, что вам нужен «длинный без сингла» для покрытия двойного, в любом случае вам нужно что-то, что показывает двоичное (1 или 0) представление.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...