Эта функция выводит беззнаковое целое число в двоичном формате, проверяя каждый бит отдельно с помощью побитовых операций.
Функция использует побитовые операции AND (&) и сдвиг влево (<<) для извлечения и вывода каждого бита:
SHIFT вычисляет позицию старшего бита (MSB)MASK изолирует один бит за раз, сдвигая влево'1' или '0' в зависимости от результатаvoid displayBits( unsigned value ) {
const int SHIFT = 8 * sizeof(unsigned) - 1;
const unsigned MASK = 1 << SHIFT;
cout << setw(10) << value << " = ";
for (unsigned i = 1; i <= SHIFT + 1; i++) {
cout << (value & MASK ? '1' : '0');
value <<= 1;
if (i % 8 == 0)
cout << ' ';
}
cout << endl;
}
Альтернативный подход — многократное деление на 2 до тех пор, пока значение не станет нулём. Однако он требует стека для разворота результата, поскольку деление даёт биты в обратном порядке — от младшего к старшему.
Побитовый подход обычно предпочтительнее благодаря своей прямолинейности и наглядности при работе с битами.
Константа SHIFT в предоставленной функции равна 8 * sizeof(unsigned) - 1, потому что она должна указывать на позицию наиболее значимого бита в беззнаковом целом числе.
Новый — ещё не проверен сообществом
Вы