Программирование на языке С. Наместников С.М. - 37 стр.

UptoLike

Составители: 

37
получится результат 00101000. Здесь каждый бит перемещается влево на две
позиции, а появляющиеся новые биты устанавливаются нулевыми. Рассмотрим
особенности действия данной операции на следующем примере:
int var = 1;
var = var <<1; //00000010 – значение 2
var <<= 1; //00000100 – значение 4
Можно заметить, что смещение битов переменной на одну позицию влево
приводит к операции умножения числа на 2. В общем случае, если выполнить
сдвиг битов на n шагов, то получим результат равный умножению переменной
на
n
2. Данная операция умножения на число
n
2 является более быстрой, чем
обычное умножения, рассматриваемое ранее.
Аналогично, при операции смещения вправо >> происходит сдвиг битов
переменной на шаг, указанный в правом операнде. Например, сдвиг
00101011 >> 2;
приведет к результату 00001010. Здесь, также как и при сдвиге влево, новые
появляющиеся биты устанавливаются равными нулю. В результате выполнения
последовательностей операций
int var = 128; //1000000
var = var >> 1; //0100000 – значение 64
var >>= 1; //0010000 – значение 32
значение переменной var каждый раз делится на 2. Поэтому сдвиг var >>= n
можно использовать для выполнения операции деления значения переменной
на величину
n
2.
Битовые поля
Стандарт C99, который часто является основой языка С++, позволяет
описывать данные на уровне битов. Это достигается путем использования
битовых полей, представляющие собой переменные типов signed или unsigned
int, у которых используются лишь несколько бит для хранения данных. Такие
переменные обычно записываются в структуру и единую последовательность
бит. Рассмотрим пример, в котором задается структура flags, внутри
которой
задано 8 битовых полей:
struct {
unsigned int first : 1;
unsigned int second : 1;
unsigned int third : 1;
unsigned int forth : 1;
unsigned int fifth : 1;
unsigned int sixth : 1;
unsigned int sevnth : 1;