创建这个数字的最快方法?

Del*_*ani 6 javascript bit-manipulation

我正在编写一个函数来将带符号的数字扩展到更宽的位长.这是PowerPC指令集中经常使用的操作.这是我到目前为止:

function exts(value, from, to) {
    return (value | something_goes_here);
}
Run Code Online (Sandbox Code Playgroud)

value是整数输入,fromvalue正在使用的位数,to是目标位长度.

创建一个to - from设置为位的数字的最有效方法是什么1,然后将from位设置为0

忽略JavaScript没有0b数字语法的事实,例如,如果我调用了

exts(0b1010101010, 10, 14)
Run Code Online (Sandbox Code Playgroud)

我希望函数使用OR值0b11110000000000,返回符号扩展结果0b11111010101010.

How*_*ard 5

可以通过生成包含p一位后跟q零位的数字

((1<<p)-1)<<q
Run Code Online (Sandbox Code Playgroud)

因此在你的情况下

((1<<(to-from))-1)<<from
Run Code Online (Sandbox Code Playgroud)

或者更短

(1<<to)-(1<<from)
Run Code Online (Sandbox Code Playgroud)