Я мог бы создать побитовое дерево, которое выглядит так:
x
_____________|___________
| |
___●___ ___□___
| | | |
_■ _○ _■ □_
| | | |
_■ __■__ ____●___ ○____
| | | | | |
● ● □_ ● _○_ ___□
| | | |
○ ● ○ __■
|
●
Однако я хотел бы попробовать что-то другое. Вместо того, чтобы делать двоичные попытки (побитовые попытки) - которые основаны на взятии 1 бита за раз и выборе следующих 1 из 2 слотов для посещения - я хотел бы использовать 2 бита за раз или 3 бита за раз и т. Д. Использование 2-х бит за раз создаст дерево с 4 ветвями. Используя 3 бита, он будет иметь 8 ветвей. Это было бы неплохо использовать для небольшого сжатия дерева.
Так что мне интересно, как это сделать. Как взять целое число и по существу вырезать 2 или 3 или n бит за один раз. Итак, учитывая целое число, подобное этому:
10010110
То есть 150
в двоичном формате.
Я хотел бы получить, скажем, 2 байта за раз, так:
10
01
01
10
Это означало бы, что я поместил его в слот 2, затем 1, затем 1, затем 2. Или, если я выбрал 4 бита, то:
1001
0110
Это поместит его в слот 9, а затем в слот 6.
Итак, вопрос в том, как реализовать такую функцию:
function sliceInteger(integer, start, length) {
return integer[start..length]
}
var x = sliceInteger(150, 4, 4) // => 6