Эффективность извлечения немного из байта

Я извлекаю 8-й бит из байта в C. Вот мой пример.

register unsigned char byte;

int pos = 7;

int x =(byte >> pos) & 1;   //Method I

int y =(byte & 0x80) >> pos;    //Method II

Оба метода приведут к одинаковому результату, но является ли один из методов более эффективным, чем другой?

2

Решение

Оба будут одинаковыми. Инструкции AND и SHR являются одночасовыми на процессорах Intel.

4

Другие решения

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

1

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

unsigned char val;
const int pos = 4;
...
int x = (val >> pos) & 1;
int y = (val & 0x10) >> pos;

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

unsigned char val;
int pos;
...
/* requires only a shift and AND */
int x = (val >> pos) & 1;
/* requires two shifts and AND */
int y = (val & (1 << pos)) >> pos;
1
По вопросам рекламы [email protected]