Russian Qt Forum
Октябрь 02, 2024, 17:17 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: представление чисел в двоичном виде  (Прочитано 9418 раз)
trot
Гость
« : Ноябрь 11, 2011, 19:04 »

Необходимо отобразить любое число (целое или с плавающей точкой) в виде нулей и единиц, т.е. в бинарном виде.
Например, число float f=3;
нужно вывести на экран в виде "0100000001000....".
Подскажите варианты решений. Спасибо.
Записан
BuRn
Гость
« Ответ #1 : Ноябрь 11, 2011, 20:06 »

ну а если банально перевести просто в двоичную систему счисления по правилам
Записан
madRoger
Гость
« Ответ #2 : Ноябрь 11, 2011, 22:34 »

Для перевода целых чисел подойдет QString::number с указанием системы исчисления.
Записан
andrew.k
Гость
« Ответ #3 : Ноябрь 11, 2011, 23:29 »

Для перевода целых чисел подойдет QString::number с указанием системы исчисления.
Подозреваю, что в качестве решения лабы это не прокатит)
Записан
LisandreL
Птица говорун
*****
Offline Offline

Сообщений: 984


Надо улыбаться


Просмотр профиля
« Ответ #4 : Ноябрь 12, 2011, 03:37 »

Подозреваю, что в качестве решения лабы это не прокатит)
Просто с приведением дробного числа к двоичному виду оно не справится.
Записан
trot
Гость
« Ответ #5 : Ноябрь 13, 2011, 21:58 »

QString::number только для целых, а плавающей точкой как перевести число в двоичный вид? Подскажите какие могут быть варианты. Спасибо
Записан
MoPDoBoPoT
Гость
« Ответ #6 : Ноябрь 13, 2011, 22:27 »

Воспользоваться union
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #7 : Ноябрь 13, 2011, 23:55 »

Код
C++ (Qt)
template <class T>
void PrintBin( const T & src )
{
 char dstBuf[65];
 char * buf = dstBuf + sizeof(dstBuf);
 *(--buf) = 0;
 
 size_t num = sizeof(T);
 long long val;
 switch (num) {
   case 1:
   case 2:
     val = src;
     break;
 
   case 4:
     val = *(int *) &src;
     break;
 
   case 8:
     val = *(long long *) &src;
     break;
 
   default:
    assert(0);  // invalid T
 }
 
 for (size_t i = 0; i < num * 8; ++i) {
  *(--buf) = (val & 1LL) ? '1' : '0';
  val >>= 1;
 }
 
 printf("binary: %s\n", buf);
}
 
« Последнее редактирование: Ноябрь 14, 2011, 00:00 от Igors » Записан
trot
Гость
« Ответ #8 : Ноябрь 16, 2011, 18:13 »

Спасибо всем, особенно Igors
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.136 секунд. Запросов: 24.