powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Битовые поля
16 сообщений из 16, страница 1 из 1
Битовые поля
    #39677308
andrej2005
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день!

Код: plaintext
1.
2.
3.
4.
5.
	long поле1[];
	long long поле2;
	long long поле3[5];
	bool поле4;
	bool поле5[10];



Возможно ли в С++ скопировать информацию в поле1 со всех остальных переменных побитово, т.е. значения поле4 и поле5 в поле1 будут занимать по одному биту, а поле2 и поле5 необходимо разделить пополам и насыпать в поле1?
...
Рейтинг: 0 / 0
Битовые поля
    #39677313
andrej2005
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ну, немного хочу уточнить, скопировать конечно можно, меня интересует какой-нибудь элегантный способ вроде инструкции итд, чтобы не проходить все циклами и разными там битовыми перемещениями
...
Рейтинг: 0 / 0
Битовые поля
    #39677317
m_Sla
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
union + битовые поля
Код: plaintext
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.
#include <iostream>

using namespace std;

int main()
{
    union my_data
    {
        uint16_t a;
        struct
        {
           unsigned b1:1;
           unsigned b2:1;
           unsigned b3:6;
            
        };
    };
    my_data data;
    data.b3 = 20;
    data.b2 = 1;
    data.b1 = 1;
    
    cout<<data.a<<endl;
    
    return 0;
}

...
Рейтинг: 0 / 0
Битовые поля
    #39677331
a guest
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
m_Sla, UB
...
Рейтинг: 0 / 0
Битовые поля
    #39677759
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Начать надо с того, что тут нет битовых полей , ну ладно...

andrej2005Добрый день!

Код: plaintext
1.
2.
3.
4.
5.
	long поле1[];
	long long поле2;
	long long поле3[5];
	bool поле4;
	bool поле5[10];



Возможно ли в С++ скопировать информацию в поле1 со всех остальных переменных побитово, т.е. значения поле4 и поле5 в поле1 будут занимать по одному биту, а поле2 и поле5 необходимо разделить пополам и насыпать в поле1?

Возможно, конечно, возможно. На С++ возможно всё!
...
Рейтинг: 0 / 0
Битовые поля
    #39682835
andrej2005
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
m_Sla, union немного не то, я ими уже пользовался - классная вещь. Но, когда речь идет о тысяче логических переменных, то он очень трудоемкий.
...
Рейтинг: 0 / 0
Битовые поля
    #39682836
andrej2005
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MasterZiv, я возможно неправильно выразился, мне необходимо загнать логические переменные (8 битов) побитово одним махом, допустим, в unsigned short, которое из себя представляет status word.
...
Рейтинг: 0 / 0
Битовые поля
    #39682839
andrej2005
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
andrej2005MasterZiv, я возможно неправильно выразился, мне необходимо загнать логические переменные (8 битов) побитово одним махом, допустим, в unsigned short, которое из себя представляет status word.
таким образом редуцировать bool на один бит и съэкономить память в чипе.
...
Рейтинг: 0 / 0
Битовые поля
    #39682883
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrej2005MasterZiv, я возможно неправильно выразился, мне необходимо загнать логические переменные (8 битов) побитово одним махом, допустим, в unsigned short, которое из себя представляет status word.Пишете (громоздкое) выражение, которое уже компилятор превратит в (максимально) компактный код.
Да, не из одной операции, но у памяти - байтовая организация.
...
Рейтинг: 0 / 0
Битовые поля
    #39682894
m_Sla
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
andrej2005andrej2005MasterZiv, я возможно неправильно выразился, мне необходимо загнать логические переменные (8 битов) побитово одним махом, допустим, в unsigned short, которое из себя представляет status word.
таким образом редуцировать bool на один бит и съэкономить память в чипе.так ты не делай отдельно эти 5 bool, а сразу делай эти bool в статус ворд и работай только с статус вордом
...
Рейтинг: 0 / 0
Битовые поля
    #39682901
m_Sla
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
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.
#include <iostream>

using namespace std;


class status_word
{
public:
    uint16_t data;

    status_word()
    {
        data=0x0000;
    }

    uint8_t get_int_3bit()
    {
        return data & 7;
    }

    uint8_t set_int_3bit(uint8_t a)
    {
        a &= 7;
        data &= 0xFFF8;
        data |= a;
    }

    bool get_bool1()
    {
        return data &(1<<3);
    }

    bool set_bool1(bool a)
    {
        data &= 0xFFF7;

        if(a) data |= 1<<3;
    }

    void print()
    {
        cout << "data=" << data << "  3_bit=" << (int)get_int_3bit() << " bool1=" << get_bool1() << endl;
    }

};

int main()
{
    status_word w;

    w.set_int_3bit(0x00f3);
    w.set_bool1(true);
    w.print();

    w.set_int_3bit(0x0001);
    w.set_bool1(false);
    w.print();

    return 0;
}

...
Рейтинг: 0 / 0
Битовые поля
    #39682903
m_Sla
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Еще посмотри http://www.cplusplus.com/reference/bitset/bitset/
там есть std::bitset::to_ulong

Потом этот итоговый ulong можно сдвигами загонять в статус ворд.
Насколько bitset оптимален по памяти/быстродействию не знаю.
...
Рейтинг: 0 / 0
Битовые поля
    #39682940
Фотография ну я
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivНа С++ возможно всё!
Ой ли. Тот же static virtual в ObjectPascal идет искаропки.
...
Рейтинг: 0 / 0
Битовые поля
    #39683646
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ну яОй ли. Тот же static virtual в ObjectPascal идет искаропки.Ась????
что подразумеваешь под "static virtual" ?
...
Рейтинг: 0 / 0
Битовые поля
    #39683648
Фотография NekZ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kealon(Ruslan)ну яОй ли. Тот же static virtual в ObjectPascal идет искаропки.Ась????
что подразумеваешь под "static virtual" ?
http://wiki.c2.com/?VirtualStaticIdiom
...
Рейтинг: 0 / 0
Битовые поля
    #39683668
kealon(Ruslan)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NekZkealon(Ruslan)пропущено...
Ась????
что подразумеваешь под "static virtual" ?
http://wiki.c2.com/?VirtualStaticIdiom хорошая идома, делается на уровне компилятора
но в паскале (реализации дельфи) её нет, во всяком случае я не знаю такого
...
Рейтинг: 0 / 0
16 сообщений из 16, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / Битовые поля
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]