vanvanov
Кстати, можете подсказать, что значит следующее:
int code=791651;
packed_code[0] = code & 0x0000ff;
packed_code[1] = (code & 0x00ff00)>>8;
packed_code[2] = (code & 0xff0000)>>16;
Это наложение битовых масок (для обнуления битов) и взятие определённых частей числа в битовом представлении.
Например
Это выражение можно записать
И что оно делает: берётся значение из code и представляется в двоичной форме в виде нулей и единиц; берётся значение 0x0000ff и представляется в двоичной форме в виде нулей и единиц; затем над этими двоичными формами проводится операция побитового И.
К примеру, в code было число 12345, его двоичная форма будет 11000000111001, а для числа 0x0000ff двоичная форма будет 11111111 (если слева брать шире, то там будут нули). В итоге мы ставим друг напротив друга эти два числа в двоичной форме
11000000111001
00000011111111
и потом мы их побитово проводим через операцию И.
Операция И действует так:
0 И 0 даёт 0
0 И 1 даёт 0
1 И 0 даёт 0
1 И 1 даёт 1
Таким образом, мы в результате операции И получаем
11000000111001
И
00000011111111
=
00000000111001
Число 111001 в десятичной системе равно 57.
Таким образом, если code равно 12345, то code & 0x0000ff = 57. При этом часть 0x0000ff играет роль
битовой маски. Почему она так называется - потому что она, как маска, накладывается на число и от числа остаётся только то, что прошло вокруг маски и не прошло всё то, что маска закрыла собой.
Дальше я тебе расписывать не буду, так как это азбучные истины. Я тебе лучше книжку дам правильную, если тебе эта тема интересна, как и нам всем.

Я это узнал в 2008 году из книги K&R2, которую я заказал на Ozon'е (интернет-магазин такой) и которая по почте пришла мне с наложенным платежом (платишь прямо на почте при получении посылки)
wiki. книгаПосле неё вопросов про битовые операции у меня не осталось.
tags: bit