Вы должны изменить свой дизайн, внутренний цикл не должен существовать в первую очередь -
вам следует избегать работы с битами, преобразовывать свои битовые проверки в однобайтовую проверку.
Я не могу сказать вам точно, как, поскольку это основано на типе проверки, которую вы делаете, но я предполагаю, что в этом участвует оболочка зацикливания таблицы.
EDIT:
Еще одна вещь, которую стоит учитывать: если вы действительно хотите сделать часть кода быстрее, вы можете использовать специальные инструкции процессора, ваш компилятор, вероятно, не будет знать, когда их использовать.
Например, в Intel можно использовать множество инструкций, вплоть до SSE4 и более, именно здесь вы можете работать лучше, чем ваш компилятор, поскольку у него нет способа узнать, чего вы хотите достичь на уровне алгоритма.
За подробностями обращайтесь к Руководству разработчика программного обеспечения Intel (R) 64 и IA-32.
Также на этом уровне вы можете получить лучший контроль над конвейером.
Если вы не хотите писать ассемблер, иногда для команд используются функции обертывания, которые можно использовать в «C».
Относительно проверки, включен ли бит:
Не уверен, что вы хотите сделать, если бит включен, но (при условии, что ваши биты выровнены по байту):
Предположим, вы получите байт 0110 0110 в X.
Возможно, вы захотите сделать что-нибудь, например, напечатать массаж, например: «Биты 1,2,5,6 включены».
Вы можете создать 256 функций, каждая из которых будет выполнять что-то вроде отображения этого вида массажа.
Как бы вы узнали, какой из них активировать?
Оболочка номера функции будет точно значением полученного байта, так что вы можете просто использовать
оператор [], чтобы пойти туда. однако это будет таблица указателей на функции.
Это должно выглядеть примерно так:
//define the functions
void func0()
{
printf("No Bits are on.");
}
void func1()
{
printf("Bit 0 is on.");
}
.
.
.
//create the table
void (*table[256])();
table[0] = &func0;
table[1] = &func1;
.
.
.
//the for loop
void (*pointer_to_func)();
for...
{
X = getByte();
pointer_to_func = table[X]; //table shell contain 256 function pointers.
pointer_to_func(); //call the function
}
это должно вызвать функцию в позиции X и выполнить ее, я предполагаю, что функция в позиции X == 102 (десятичное число 0110 0110) будет выглядеть примерно так:
printf («Биты 1,2,5,6 включены»);
См. Руководства по указателям на функции
, Конкретно это .