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

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

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

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

11.12.2010, 19:24. Просмотров 7689. Ответов 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++):

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

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

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

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

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

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

3
fasked
Эксперт С++
4942 / 2522 / 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;
}
1
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
lemegeton
2925 / 1354 / 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;
0
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 { ...

Даны натуральные числа a,b(a<= Ь). Получить все простые числа р, удовлетворяющие неравенствам a<= р<= b. - C++
Даны натуральные числа a,b(a&lt;= Ь). Получить все простые числа р, удовлетворяющие неравенствам a&lt;= р&lt;= b. Решите на С++. Буду очень...

Даны целые числа р и q. Получить все делители числа q, взаимно простые с р. - C++
Даны целые числа р и q. Получить все делители числа q, взаимно простые с р. Решите на С++. Заранее спасибо!


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

Или воспользуйтесь поиском по форуму:
4
Yandex
Объявления
11.12.2010, 22:41
Ответ Создать тему
Опции темы

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