Я думаю, они обычно называются BitFlags (хранение логических значений в виде отдельных битов в слове), это особый случай BitFields: для адресации произвольной ширины битов для различных значений.
Вполне возможно, что у него есть несколько имен, так как это довольно очевидно и, вероятно, все время заново открывается независимо от того, как люди учатся программировать (вот как я это обнаружил).
Вместо того, чтобы вычислять числовое значение, оно более распространено длясоздать битовое поле, используя SHIFT и OR, и уничтожить их, используя SHIFT и AND - так как это более буквально, интуитивно (и быстрее);Числовое значение является лишь побочным эффектом интерпретации целого слова как целого числа.то есть:
// construct
x = 0;
// set bit 0
x |= true << 0;
// set bit 1
x |= false << 1;
// set bit 2
x |= true << 2;
x // 5
// destruct
x = 3
// get bit 0
!! (x >> 0 & 1); // true
// get bit 1
!! (x >> 1 & 1); // true
// get bit 2
!! (x >> 2 & 1); // false
Кроме того, если вы отправляете данные в неэффективном формате, например, в текстовом формате или в формате JSON через AJAX, вам нужно закодировать полученное число, чтобы максимизировать биты, упакованные в каждый символ ...использование x.toString(36)
позволит вам хранить 5 бит (2 ^ 5 = 32) в одном символе (a-z0-9).Или вы можете выжать еще один бит, если используете String.fromCharCode(x + 32)
- если вы посмотрите на таблицу ASCII, то вы можете использовать все печатные символы в диапазоне 32-127 = 95, что достаточно для значений 6 бит (2 ^6 = 64), но не 7 (2 ^ 7 = 128).Попытка использовать более 6 бит приведет к тому, что некоторые комбинации будут выводить многобайтовые символы UTF8, что, вероятно, не стоит затрат на кодирование (они будут отображаться как один символ, но на самом деле используют 2-4 байта).