Вопрос к программистам!!! Пожалуйста помогите решить простую задачу! - страница 2

 

А не проще ли взять обычный Интегер и залить его в бинарный массив?

ЗЫ или есть особенность присвоения, ну там числа не подряд идут? 

 

нужен перебор всех доступных вариантов взаимодействия элементов в массиве bool m[MAX_M](MAX_M может быть равен и 20 и 25). Предложенный вариант вполне подходит, но если есть идеи более быстрой реализации, то буду благодарен.

Каждый уникальный вариант сохраняется в отдельный массив. получается массив массива уникальных триггеров, где нет повторения. то-есть a[][MAX_M] хранит в себе все доступные варианты.

В коде мне нужно отдельное сохранение одновременно активных значений начиная от 1 одновременно активного элемента, и заканчивая Максимальным значением MAX_M 

 

Я что-то вообще не пойму, зачем создавать массивы с возможными значениями. Вытащить из числа бит с нужным номером - дело нехитрое

#define GET_BIT(num, bit_pos)  uchar((num & (ulong)MathPow(2, bit_pos)) == 0 ? 0 : 1)

void OnStart()
{
   // Проверим битовое представление чисел в диапазоне от 0 - 9
   for(int i=0;  i<10;++ i){
    // Выводим 4 первых бита
    Alert( "i=", i, "  ", GET_BIT(i,3), GET_BIT(i,2), GET_BIT(i,1), GET_BIT(i,0) );
   }
}

Макрос запутанно выглядит, суть: num & 2^bit_pos

 
I_Alex_I:

нужен перебор всех доступных вариантов взаимодействия элементов в массиве bool m[MAX_M](MAX_M может быть равен и 20 и 25). Предложенный вариант вполне подходит, но если есть идеи более быстрой реализации, то буду благодарен.

Каждый уникальный вариант сохраняется в отдельный массив. получается массив массива уникальных триггеров, где нет повторения. то-есть a[][MAX_M] хранит в себе все доступные варианты.

В коде мне нужно отдельное сохранение одновременно активных значений начиная от 1 одновременно активного элемента, и заканчивая Максимальным значением MAX_M 

Не очень понятно для чего?

Uchar Integer Ulong это уже битные маски с уникальными тригерами. Уверяю вас они не повторяются и перебирают все варианты.

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

В чём суть затеи? для чего вам нужны битовые маски?

ЗЫ Чтоб не быть голословным например вот так:

struct Uchar{uchar u;}
struct UcharM{bool m[8];}

Uchar U.u=255;
UcharM M=U;
// Всё, массив M.m[] заполнен битовой маской числа 255 в двоичном представлении
 
Nikolay Demko:

Не очень понятно для чего?

Uchar Integer Ulong это уже битные маски с уникальными тригерами. Уверяю вас они не повторяются и перебирают все варианты.

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

В чём суть затеи? для чего вам нужны битовые маски?

ЗЫ Чтоб не быть голословным например вот так:

попробую через такую реализацию, если пучится, то такой вариант будет удобнее, и возможно намного быстрее.
 
pavlick_:

Я что-то вообще не пойму, зачем создавать массивы с возможными значениями. Вытащить из числа бит с нужным номером - дело нехитрое

Макрос запутанно выглядит, суть: num & 2^bit_pos

Не проще ли?
#define GET_BIT(num, bit_pos)  ((uchar)num >> bit_pos) & 1)
 
pavlick_:

Я что-то вообще не пойму, зачем создавать массивы с возможными значениями. Вытащить из числа бит с нужным номером - дело нехитрое

Макрос запутанно выглядит, суть: num & 2^bit_pos

Вот, приношу огромную благодарность!!! Лучший и самый удобный вариант решения поставленной задачи!!! 
 
fxsaber:
Не проще ли?
а может и этот еще лучше, сейчас проверю!
 
Nikolay Demko:

ЗЫ Чтоб не быть голословным например вот так:

Вы сильно ошиблись.
 
fxsaber:
Не проще ли?
Ваш вариант не хочет работать, Функция GET_BIT в вашем варианте возвращает значение?
Причина обращения: