LINUX.ORG.RU
Ответ на: комментарий от ixrws

Может быть. Но мне в пределах бита нужно делать перестановки и делать их максимально быстро. Может имеет смысл делать вставки на ассемблере?

aiqu6Ait ★★★★
() автор топика

Как вариант - сделать структуру, позволяющую обращаться к произвольным битам байта:

typedef union {
  struct {
    unsigned char bit0;
    unsigned char bit1;
    unsigned char bit2;
    unsigned char bit3;
    unsigned char bit4;
    unsigned char bit5;
    unsigned char bit6;
    unsigned char bit7;
  };
} my_byte;

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от Eddy_Em

это мрак какой-то...
с какой стати my_byte.bit0 вернет тебе именно бит 0???
уж лучше использовать битовые поля:

struct my_byte{
unsigned char bit0:1;
unsigned char bit1:1;
unsigned char bit2:1;
unsigned char bit3:1;
unsigned char bit4:1;
unsigned char bit5:1;
unsigned char bit6:1;
unsigned char bit7:1;
};

xydo ★★
()
Ответ на: комментарий от urxvt

Линк без якоря должен был быть, просто забукмакил так.

urxvt ★★★★★
()
Ответ на: комментарий от xydo

> уж лучше использовать битовые поля:

Точно, забыл про :1

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от xydo

Нет, в сответствии с жёстко заданным алгоритмом.

aiqu6Ait ★★★★
() автор топика
Ответ на: комментарий от aiqu6Ait

> Может быть. Но мне в пределах байта нужно делать перестановки и делать их максимально быстро.

Если только в пределах байта, то может подойти табличная трансляция.

char table[256];
....
char in, out;
....
out = table[in];

> Может имеет смысл делать вставки на ассемблере?


Не имеет. Узким местом в твоем случае является жесткий диск.

Manhunt ★★★★★
()

Запросить бит n в байте - if (byte & (1 << n)) { .. бит == 1 ..} else { bit == 0 ..}

Установить бит n в байте - byte |= ( 1 << n )

Сбросить бит n в байте - byte &= ~(1 << n)

Absurd ★★★
()

Спасибо за битовые поля. Именно с ними и буду реализовывать алгоритм.

aiqu6Ait ★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.