Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 54, средняя оценка - 4.94
illgocrazy
Сообщений: n/a
#1

Получить бит числа - C++

11.12.2010, 19:24. Просмотров 7414. Ответов 3
Метки нет (Все метки)

Необходимо получить значение бита числа double. Такой код:
C++
1
2
3
4
5
6
7
8
9
bool getBit(double * d, int bit){
 
        unsigned mask=1<<bit;
        bool res;
        if (bit >32) 
            res=(*((unsigned *)d+1))&mask;
        else res=(*(unsigned *)d)&mask;
        return res;
    }
работает очень медленно. Наверно, есть другие способы. Подскажите, пожалуйста.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.12.2010, 19:24     Получить бит числа
Посмотрите здесь:

Первый бит числа - C++
Пишу программу для сжатия файлов по алгоритму RLE. Чтобы программа понимала, что читаемое число отвечает за количество символов, я решил...

Обратить каждый второй бит числа. - C++
Дано число в шестнадцатеричной системе исчисления 12ВF вывести его в &quot;битовой форме&quot; (011011001) потом обратить каждый второй бит и...

как проверить восьмой бит числа - C++
как проверить восьмой бит числа на 0 либо 1 не зная остальные биты? И можно ли вообще?

Вывести 6 бит целого числа А, начиная со 2-ого - C++
Никак не могу вникнуть в суть этих побитовых операций. Здесь, по идее, нужно указать некую маску(прошу объяснить, как его кушают, я,...

Бит 8, младший и старший бит (по книге) - C++
Добрый день. Вот читаю книгу, и не пойму элементарной на первый взгляд вещи. Как понять следующие предложения: 1) Если бит...

Установить в единицу каждый второй бит заданного целого числа - C++
Доброго времени суток . Такая вот задача : установить в единицу каждый второй бит целого числа А. Догадываюсь что нужно делать через...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
fasked
Эксперт С++
4933 / 2513 / 180
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
11.12.2010, 20:13     Получить бит числа #2
Бит из double. Редкое извращение. Надо заметить, что Вы получаете бит не из double, а целочисленного числа, к которому было приведено число типа double.

C
1
2
3
4
5
6
7
8
9
10
#include <stdio.h>
 
#define GETBIT(x,pos)   ( ((x) & ( 0x1 << (pos) )) !=0 )
 
int main()
{
        double a = 7.8;
        printf("%d\n", GETBIT((unsigned int)a, 2));
        return 0;
}
illgocrazy
Сообщений: n/a
11.12.2010, 22:06     Получить бит числа #3
Работает действительно быстрее. Но неправильно. Выводит как раз биты приведенного к целому числа.
А я привожу не само double к unsigned, а указатель на double к указателю на unsigned, поэтому получаю нужные числа.
C++
1
2
double a=7.8;
printf("%d\n", getBit(&a, 2));
Результат: 0.

Добавлено через 56 минут
Всё получилось и работает в 7 и более раз быстрее На всякий случай правильное решение:

C++
1
#define GETBIT(x,pos)   ( ((x) & ( 0x1 << (pos) )) !=0 )
C++
1
2
3
4
5
double a=7.8;
for (int i=31; i>=0;i--)
printf("%d", GETBIT(*(((unsigned int*)&a)+1), i));
for (int i=63; i>31;i--)
printf("%d", GETBIT(*(unsigned int*)&a, i));
Получаю результат, как здесь http://www.binaryconvert.com/result_...imal=055046056
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.12.2010, 22:41     Получить бит числа
Еще ссылки по теме:

Что означает длина простого числа 256 или 1024 бит? - C++
Привет, товарищи! Вообщем вопрос такой. Хочу реализовать подпись ГОСТ Р34.10-94. В условии написано: Нужно рандомно взять 2 числа: q...

переход с 32 бит на 64 бит - C++
Здравствуйте. Пробую на builder 10 перевести проект с 32 на 64 бит. Возникают странные ошибки: template &lt;typename T&gt; class DOT { ...

Даны натуральные числа n, m. Получить сумму m последних цифр числа n - C++
Даны натуральные числа n, m. Получить сумму m последних цифр числа n. с пояснениями в 2010 версии заранее спс! Добавлено через 31...

Даны натуральные числа n, m. Получить сумму m средних цифр числа n - C++
Даны натуральные числа n, m. Получить сумму m средних цифр числа n Рассмотреть два варианта для четного и не четного количества цифр в...

Из целого числа получить новое, состоящее из нечетных цифр числа (2315663 -> 3153) - C++
Из целого числа получить новое, состоящее из нечетных цифр числа (2315663 -&gt; 3153) на DevC++. Заранее спасибо

Получить из трехзначного числа четырехзначное подстановкой в начало числа цифры его единиц - C++
Требуется написать программу, которая их исходного трёхначного числа x получает четырёхзначное число путём подстановки в начало числа x...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
lemegeton
2923 / 1352 / 135
Регистрация: 29.11.2010
Сообщений: 2,725
11.12.2010, 22:41     Получить бит числа #4
C++
1
2
3
4
5
6
        double n = 2.00001;
        unsigned long int* c = static_cast<unsigned long int*>(static_cast<void*>(&n));
        for (int i=sizeof(double)*8-1; i>=0; i--)
                std::cout << ((*c >> i)&1);
 
        std::cout << std::endl;
Yandex
Объявления
11.12.2010, 22:41     Получить бит числа
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru