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

Нумерация битов в битовых полях - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Интегрированные структуры данных, записи http://www.cyberforum.ru/cpp-beginners/thread1134894.html
Для каждой области перечислены параметры объекта. Среди параметров обязательно есть ключевое алфавитное поле (например, фамилия), которое идентифицирует объект, у каждого объекта имеется также одно...
C++ Взаимно ссылающиеся классы: 1)Правильное описание 2)ошибки IntelliSense Есть такой код: class A; //объявление кл. А (т.н. "forward declaration") class E { //описание кл. Е public: void static changeA(A&); }; class A { ... http://www.cyberforum.ru/cpp-beginners/thread1134891.html
Задача с массивом C++
Дана такая задача : Все правильно показывает до 6-й степени двойки, а дальше не правильные степени.. в чем ошибка? Выполнил ее вот так : #include <iostream> #include <cstdlib> #include...
C++ Разработать программу, определяющую принадлежит ли точка заданной фигуре
Подскажите пожалуйста, зачем нужен "!" в выражении (x*x+y*y<=1 && !(x>0 && y<0)). Оно правильно только не понимаю для чего тут "!". Сама задача такова: Разработать программу, определяющую...
C++ Бинарные файлы http://www.cyberforum.ru/cpp-beginners/thread1134836.html
Помогите пожалуйста написать программы. Исходный файл формировать программно. Количество элементов исходного файла неизвестно. В файле содержатся числа. Сформировать из них матрицу, содержащую ...
C++ Определите, является последовательность, содержащаяся в файле, знакопеременной Пусть Дан Файл целых чисел.Определите,является последовательность,в нем содержащаяся знакопеременной. подробнее

Показать сообщение отдельно
DrOffset
7147 / 4288 / 966
Регистрация: 30.01.2014
Сообщений: 7,091
01.04.2014, 16:31
Цитата Сообщение от SatanaXIII Посмотреть сообщение
Битовое поле-то по ссылке нельзя получить.
Да это не обязательно. Да и вообще, сдается мне, битовое поле тут нафиг не упало (кому нужны проблемы с union и выравниванием?). Коли уж так хочется итерировать биты, вот накидал на коленке. В ассемблере никакого криминала не обнаружил. Хорошо оптимизируется, вплоть до подстановки константы, в случае если биты задаются inplace.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
template <typename T>
class bitfield
{
    class bitfield_proxy
    {
        friend class bitfield;
 
        bitfield_proxy(bitfield & ctrl, size_t idx)
            : ctrl_(ctrl), shifted_(T(1) << idx)
        { }
        bitfield_proxy(bitfield_proxy const & x)
            : ctrl_(x.ctrl_), shifted_(x.shifted_)
        {}
 
        bitfield_proxy & operator=(bitfield_proxy const &);
 
        bitfield & ctrl_;
        const T    shifted_;
 
    public:
        void operator=(bool bit)
        {
             bit ? ctrl_.data_ |= shifted_ : ctrl_.data_ &= ~shifted_;
        }
        operator bool() const
        {
            return ctrl_.data_ & shifted_;
        }
    };
 
    T data_;
 
public:
    bitfield(T data = T())
        : data_(data)
    {}
 
    bool operator[](size_t idx) const
    {
        return data_ & (T(1) << idx);
    }
    bitfield_proxy operator[](size_t idx)
    {
        return bitfield_proxy(*this, idx);
    }
    size_t size() const
    {
        return sizeof(T) / 8; // Вместо 8, кошернее будет CHAR_BITS
    }
    T value() const
    {
        return data_;
    }
};
 
short int test()
{
    bitfield<short int> bits;
 
    bits[3] = 0;
    bits[2] = 1;
    bits[1] = 1;
    bits[0] = 1;
 
    return bits.value();
}
 
int main()
{
    short int v = test();
 
    printf("value: %d\n", v);
}
2
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru