Страницы

Поиск по вопросам

вторник, 30 октября 2018 г.

Возможно ли инвертировать порядок бит в байте?

Т.е. можно ли средствами C++ из 1100 0000 превратить в 0000 0011 ? Какие для этого нужно использовать методы?


Ответ

Как известно, байт - это восьмиразрядное двоичное число. Стало быть, его можно представить в виде такого многочлена: b1 * 2^7 + b2 * 2^6 + ... + b7 * 2^1 + b8 * 2^0 ну или 128 * b1 + 64 * b2 + ... + 2 * b7 + 1 * b8 где b1 - b8 - биты в байте. Следовательно, получить байт "задом наперёд" можно так: unsigned char Invert(unsigned char x) { int base = 256;
unsigned char res = 0; while (x != 0) { res += (x & 1) * (base >>= 1); x >>= 1; }
return res; }

Комментариев нет:

Отправить комментарий