Перейти к содержанию
    

начальная инициализация массива

uint8_t tst_mass [1] = {(|= BIT_5)};

 

как что-то подобное делать?

Т.е. чтобы при обращении к данному элементу, происходило или с каким-то числом?

Когда буду в ф-ии вызывать данный элемент, он должен не полностью переписать элемент массива, а только бит в этом элементе.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Можно через union со структурой с битовыми полями. Но лучше, по-моему, (не)прописывать нужные биты явно при обращении.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Когда буду в ф-ии вызывать данный элемент, он должен не полностью переписать элемент массива, а только бит в этом элементе.

или 1: Использовать BitBanding.

или 2: Создать класс, перегрузив в нём оператор =.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

uint8_t tst_mass [1] = {(|= BIT_5)};

 

как что-то подобное делать?

Т.е. чтобы при обращении к данному элементу, происходило или с каким-то числом?

Когда буду в ф-ии вызывать данный элемент, он должен не полностью переписать элемент массива, а только бит в этом элементе.

 

Вы можете сформулировать требование простыми и понятными словами ?.

А то мало того, что полная дислексия, так еще и на С.

 

это работает, но непонятно, надо ли это.

uint8 arr[2] = {(1<<3), (1<<5)};

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

uint8_t tst_mass [1] = {(|= BIT_5)};

Т.е. чтобы при обращении к данному элементу, происходило или с каким-то числом?

Когда буду в ф-ии вызывать данный элемент, он должен не полностью переписать элемент массива, а только бит в этом элементе.

Читайте полностью, и делайте "или". :rolleyes:

Да... изучите битовые поля. Они сами делают "или".

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

есть массив 3-х уровневый.

const uint8_t posdigits[6][10][2 * 7] = {
    { // POS_0
        {  }, // 0
        {  }, // 1
        {  }, // 2
        {  }, // 3
        {  }, // 4
        {  }, // 5
        {  }, // 6
        {  }, // 7
        {  }, // 8
        {  }, // 9
    },

мне надо его заполнить, да так, что последний элемент массива - самые внутренние вложенные скобки- элемент 0- адрес элемента массива, элемент 1- значение. Элемент 2- адрес, 3- значение.

например, так

{1, 2, 1, 4... }, // 0

т.е. я хочу уже в обрабатываемой ф-ии вызывать элементы массива. И видим, что в номер элемента 1 я сначала пишу 2, потом, вызвав еще раз, в тот же элемент 1 пишу 4. Но мне надо, чтобы не 4, а или 4. Или где-то и 4.

Вот как соорудить это?

 

const uint8_t tst_mass [2][2] = 
{
    { 0, BIT_2 }, // 0
    { 0, BIT_3 }, // 1
};

вот так, но BIT_2 сделать ИЛИ или &

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

+1.

 

Вот это предложение можно как-то переписать, чтобы парсер русского языка на нем не спотыкался?

 

Т.е. чтобы при обращении к данному элементу, происходило или с каким-то числом?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

+1.

 

Вот это предложение можно как-то переписать, чтобы парсер русского языка на нем не спотыкался?

 

вместо "или" нужно читать "ИЛИ" )

 

 

uint8_t tst_mass [1] = {(|= BIT_5)};

 

как что-то подобное делать?

Т.е. чтобы при обращении к данному элементу, происходило или с каким-то числом?

Когда буду в ф-ии вызывать данный элемент, он должен не полностью переписать элемент массива, а только бит в этом элементе.

 

 

Например так:

struct proc
{
    int param;
    int (*do_)(int arg, struct proc* proc );
};

int do_or(int arg, struct proc* proc)
{
    return arg | proc->param;
}

int do_and(int arg, struct proc* proc)
{
    return arg & proc->param;
}

int do_proc(int arg, struct proc* proc)
{
    return proc->do_(arg, proc);
}

struct proc procs[]={
    {   .param = (1<<5) ,  do_or  }, // 0
    {   .param = (1<<7) ,  do_or  }, // 1
    {   .param = (1<<31) , do_and }, // 2
};


...
    do_proc(0x12, &procs[1]); // установка бита 7
...

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...