#javascript #bit-manipulation
#javascript #манипулирование битами
Вопрос:
Хотите знать, каков идеальный способ преобразования группы меньших битов в биты большего размера? Например, эти конкретные случаи:
- от 3 8-битных чисел до 1 24-битного числа.
- 2 16-битных числа в 1 32-битное число.
Интересно, какова общая методика, чтобы я мог применить ее к любому числу. Если это работает только для чисел, кратных 8, то это нормально, но в идеале это было бы в состоянии обрабатывать и эти случаи.
- от 3 7-битных чисел до 1 21-битного числа.
- от 9 3-разрядных чисел до 1 27-разрядного числа.
Я думал, что вы просто добавляете их, но, похоже, существует методика их сдвига, но я не уверен точно, как это работает в общем случае.
Комментарии:
1. Это во многом зависит от того, что означает «преобразование» в данном случае. (Это может быть почти что угодно.)
2. В основном я имею в виду обратное разбиению 24-битного числа на 3 8-битных числа, однако это может быть сделано.
Ответ №1:
Я предполагаю, что под «преобразованием» вы подразумеваете «объединение» битов.
Вот как вы могли бы сделать это с помощью shift:
var int1 = 23; // "8 bit" number, stored in integer variable
var int2 = 67; // another one
var int3 = 189; // a third
var concatInt = ( int1 << 16 ) ( int2 << 8 ) int3;
Здесь значение «concatInt» является побитовой конкатенацией 3 чисел [int1][int2][int3]
Конечно, вы можете делать это с любыми числами и любыми битами, при условии, что вы укладываетесь в 32-битное целое число.
Вот еще кое-что об этом:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Bitwise_Operators
Комментарии:
1. Не уверен, работает ли это во всех случаях, описанных в сообщении, дайте мне знать, для каких это работает. Спасибо.
2. Я знаю о побитовых операторах, просто не знаю, как их использовать для подобных вещей.
3. Вы просто выполняете смещение на количество битов, которое вас интересует. Для вашей ситуации с 3 7 битами просто смещайте на 14 и 7 соответственно, вместо 16 и 8 в моем примере.
4. @user10869858 У вас это сработало? Или вы хотели бы более конкретные примеры в примере кода?