Для иллюстрации некоторых побитовых операций рассмотрим функцию getbits(x, p, n), которая
формирует поле в n битов, вырезанных из х, начиная с позиции p, прижимая его к правому краю.
Предполагается, что 0-й бит — крайний правый бит, а n и p — осмысленные положительные числа.
Например, getbits(x, 4, 3) вернет в качестве результата 4, 3 и 2-й биты значения х, прижимая их к
правому краю. Вот эта функция:
/* getbits: получает п бит, начиная с р-й позиции */
unsigned getbits(unsigned х, int p, int n)
{
return (x >> (p+1-n)) & ~(~0 << n);
}
Выражение х >> (p+1-n) сдвигает нужное нам поле к правому краю.