Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/415.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何从整数中切掉位_Javascript_Integer_Bit Manipulation_Bit - Fatal编程技术网

Javascript 如何从整数中切掉位

Javascript 如何从整数中切掉位,javascript,integer,bit-manipulation,bit,Javascript,Integer,Bit Manipulation,Bit,我可以创建一个按位trie,如下所示: x _____________|___________ | | ___●___ ___□___ | | | | _■ _○ _■ □_ | |

我可以创建一个按位trie,如下所示:

                      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