Javascript 如何从整数中切掉位
我可以创建一个按位trie,如下所示:Javascript 如何从整数中切掉位,javascript,integer,bit-manipulation,bit,Javascript,Integer,Bit Manipulation,Bit,我可以创建一个按位trie,如下所示: x _____________|___________ | | ___●___ ___□___ | | | | _■ _○ _■ □_ | |
x
_____________|___________
| |
___●___ ___□___
| | | |
_■ _○ _■ □_
| | | |
_■ __■__ ____●___ ○____
| | | | | |
● ● □_ ● _○_ ___□
| | | |
○ ● ○ __■
|
●
10010110
function sliceInteger(integer, start, length) {
return integer[start..length]
}
var x = sliceInteger(150, 4, 4) // => 6
然而,我想尝试一些不同的东西。与其进行二进制尝试(按位尝试)——这是基于每次获取1位并选择要访问的2个插槽中的下一个插槽——我希望每次使用2位,或每次使用3位,等等。每次使用2位将创建一个具有4个分支的trie。使用3位,它将有8个分支。这将是一个很好的使用,以压缩trie一点
所以我想知道怎么做。如何获取一个整数并一次切掉2、3或n位。给定这样一个整数:
x
_____________|___________
| |
___●___ ___□___
| | | |
_■ _○ _■ □_
| | | |
_■ __■__ ____●___ ○____
| | | | | |
● ● □_ ● _○_ ___□
| | | |
○ ● ○ __■
|
●
10010110
function sliceInteger(integer, start, length) {
return integer[start..length]
}
var x = sliceInteger(150, 4, 4) // => 6
也就是二进制的150
我想一次得到2个字节,所以:
10
01
01
10
那就意味着我把它放在第二槽,然后是第1槽,然后是第1槽,然后是第2槽。或者如果我选择4位,那么:
1001
0110
这将把它放在9号槽,然后是6号槽
所以问题是,如何实现这样的功能:
x
_____________|___________
| |
___●___ ___□___
| | | |
_■ _○ _■ □_
| | | |
_■ __■__ ____●___ ○____
| | | | | |
● ● □_ ● _○_ ___□
| | | |
○ ● ○ __■
|
●
10010110
function sliceInteger(integer, start, length) {
return integer[start..length]
}
var x = sliceInteger(150, 4, 4) // => 6
您可以将数字转换为二进制字符串,然后拼接它,然后将其转换为十进制数字
函数切片整数(整数、起始、长度){
var binary=integer.toString(2)
二进制=二进制.slice(开始,开始+长度)
返回parseInt(二进制,2)
}
log(sliceInteger(150,4,4))
您可以使用位算术:
函数切片整数(整数、起始、长度){
返回(整数>>开始)和(1