использование побитовых операторов для упаковки нескольких значений в один int

Низкоуровневые битовые манипуляции никогда не были моей сильной стороной. Я буду признателен за некоторую помощь в понимании следующего случая использования побитовых операторов. Подумайте ...

int age, gender, height, packed_info;

. . .   // Assign values 

// Pack as AAAAAAA G HHHHHHH using shifts and "or"
packed_info = (age << 8) | (gender << 7) | height;

// Unpack with shifts and masking using "and"
height = packed_info & 0x7F;   // This constant is binary ...01111111
gender = (packed_info >> 7) & 1;
age    = (packed_info >> 8);

Я не уверен, что делает этот код и как? Зачем использовать магическое число 0x7F? Как происходит упаковка и распаковка?

Источник

29
задан Maksim Yegorov 11 October 2015 в 22:40
поделиться