реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> начальная инициализация массива
Метценгерштейн
сообщение May 22 2015, 09:15
Сообщение #1


Профессионал
*****

Группа: Свой
Сообщений: 1 357
Регистрация: 12-04-05
Из: Петербург
Пользователь №: 4 079



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

как что-то подобное делать?
Т.е. чтобы при обращении к данному элементу, происходило или с каким-то числом?
Когда буду в ф-ии вызывать данный элемент, он должен не полностью переписать элемент массива, а только бит в этом элементе.
Go to the top of the page
 
+Quote Post
aaarrr
сообщение May 22 2015, 09:47
Сообщение #2


Гуру
******

Группа: Свой
Сообщений: 10 713
Регистрация: 11-12-04
Пользователь №: 1 448



Можно через union со структурой с битовыми полями. Но лучше, по-моему, (не)прописывать нужные биты явно при обращении.
Go to the top of the page
 
+Quote Post
jcxz
сообщение May 22 2015, 09:59
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Цитата(Метценгерштейн @ May 22 2015, 15:15) *
Когда буду в ф-ии вызывать данный элемент, он должен не полностью переписать элемент массива, а только бит в этом элементе.

или 1: Использовать BitBanding.
или 2: Создать класс, перегрузив в нём оператор =.
Go to the top of the page
 
+Quote Post
CrimsonPig
сообщение May 22 2015, 10:03
Сообщение #4


Местный
***

Группа: Участник
Сообщений: 329
Регистрация: 23-04-14
Пользователь №: 81 502



Цитата(Метценгерштейн @ May 22 2015, 10:15) *
uint8_t tst_mass [1] = {(|= BIT_5)};

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


Вы можете сформулировать требование простыми и понятными словами ?.
А то мало того, что полная дислексия, так еще и на С.

это работает, но непонятно, надо ли это.
uint8 arr[2] = {(1<<3), (1<<5)};
Go to the top of the page
 
+Quote Post
ViKo
сообщение May 22 2015, 10:29
Сообщение #5


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Цитата(Метценгерштейн @ May 22 2015, 12:15) *
uint8_t tst_mass [1] = {(|= BIT_5)};
Т.е. чтобы при обращении к данному элементу, происходило или с каким-то числом?
Когда буду в ф-ии вызывать данный элемент, он должен не полностью переписать элемент массива, а только бит в этом элементе.

Читайте полностью, и делайте "или". rolleyes.gif
Да... изучите битовые поля. Они сами делают "или".
Go to the top of the page
 
+Quote Post
Метценгерштейн
сообщение May 22 2015, 11:36
Сообщение #6


Профессионал
*****

Группа: Свой
Сообщений: 1 357
Регистрация: 12-04-05
Из: Петербург
Пользователь №: 4 079



есть массив 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 сделать ИЛИ или &
Go to the top of the page
 
+Quote Post
ViKo
сообщение May 22 2015, 12:32
Сообщение #7


Универсальный солдатик
******

Группа: Модераторы
Сообщений: 8 634
Регистрация: 1-11-05
Из: Минск
Пользователь №: 10 362



Трудно понять вопрос.
Go to the top of the page
 
+Quote Post
ar__systems
сообщение Jun 2 2015, 12:25
Сообщение #8


self made
****

Группа: Свой
Сообщений: 855
Регистрация: 7-03-09
Из: Toronto, Canada
Пользователь №: 45 795



+1.

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

Цитата
Т.е. чтобы при обращении к данному элементу, происходило или с каким-то числом?
Go to the top of the page
 
+Quote Post
psL
сообщение Jun 3 2015, 08:50
Сообщение #9


Знающий
****

Группа: Свой
Сообщений: 526
Регистрация: 5-08-05
Пользователь №: 7 390



Цитата(ar__systems @ Jun 2 2015, 15:25) *
+1.

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


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


Цитата(Метценгерштейн @ May 22 2015, 12:15) *
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
...

Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 27th July 2025 - 18:12
Рейтинг@Mail.ru


Страница сгенерированна за 0.01442 секунд с 7
ELECTRONIX ©2004-2016