Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / Битовые поля / 16 сообщений из 16, страница 1 из 1
22.07.2018, 07:19
    #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
22.07.2018, 08:25
    #39677313
andrej2005
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Битовые поля
ну, немного хочу уточнить, скопировать конечно можно, меня интересует какой-нибудь элегантный способ вроде инструкции итд, чтобы не проходить все циклами и разными там битовыми перемещениями
...
Рейтинг: 0 / 0
22.07.2018, 09:03
    #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
22.07.2018, 11:44
    #39677331
a guest
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Битовые поля
m_Sla, UB
...
Рейтинг: 0 / 0
23.07.2018, 15:25
    #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
02.08.2018, 21:54
    #39682835
andrej2005
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Битовые поля
m_Sla, union немного не то, я ими уже пользовался - классная вещь. Но, когда речь идет о тысяче логических переменных, то он очень трудоемкий.
...
Рейтинг: 0 / 0
02.08.2018, 22:03
    #39682836
andrej2005
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Битовые поля
MasterZiv, я возможно неправильно выразился, мне необходимо загнать логические переменные (8 битов) побитово одним махом, допустим, в unsigned short, которое из себя представляет status word.
...
Рейтинг: 0 / 0
02.08.2018, 22:08
    #39682839
andrej2005
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Битовые поля
andrej2005MasterZiv, я возможно неправильно выразился, мне необходимо загнать логические переменные (8 битов) побитово одним махом, допустим, в unsigned short, которое из себя представляет status word.
таким образом редуцировать bool на один бит и съэкономить память в чипе.
...
Рейтинг: 0 / 0
03.08.2018, 06:19
    #39682883
Basil A. Sidorov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Битовые поля
andrej2005MasterZiv, я возможно неправильно выразился, мне необходимо загнать логические переменные (8 битов) побитово одним махом, допустим, в unsigned short, которое из себя представляет status word.Пишете (громоздкое) выражение, которое уже компилятор превратит в (максимально) компактный код.
Да, не из одной операции, но у памяти - байтовая организация.
...
Рейтинг: 0 / 0
03.08.2018, 08:01
    #39682894
m_Sla
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Битовые поля
andrej2005andrej2005MasterZiv, я возможно неправильно выразился, мне необходимо загнать логические переменные (8 битов) побитово одним махом, допустим, в unsigned short, которое из себя представляет status word.
таким образом редуцировать bool на один бит и съэкономить память в чипе.так ты не делай отдельно эти 5 bool, а сразу делай эти bool в статус ворд и работай только с статус вордом
...
Рейтинг: 0 / 0
03.08.2018, 08:27
    #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
03.08.2018, 09:09
    #39682903
m_Sla
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Битовые поля
Еще посмотри http://www.cplusplus.com/reference/bitset/bitset/
там есть std::bitset::to_ulong

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


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