JavaScript中位运算符的克隆函数列表
List of clone functions for bit operators in JavaScript?
JavaScript整数可以达到2^53,但所有的位运算只能达到2^32。有时我需要对2^32和2^53之间的数字执行位运算,所以我必须为所有位运算编写替代函数:
到目前为止,我拥有的是:
function lshift(num, bits) {
return num * Math.pow(2, bits);
}
function rshift(num, bits) {
return Math.floor(num / Math.pow(2, bits));
}
这是实现轮班功能的最佳方式吗?
我现在需要实现&
和|
。在我的代码中,我经常要用127和128来&
,但我不确定如何做到这一点
我不需要~
或^
,但为了完整性,我想它们可以包含在答案中。
一句话:保持所有数字为正以避免1-补的问题似乎是有意义的。
对于lshift函数,如果shift不会溢出32位,我不确定做一些检查是否会有回报,并在这种情况下使用常规的shift操作:它可能会减少复杂的操作,但也会添加检查和分支。。。
function and(a, b) {
var low = a & b & 0x7fffffff;
if (a <= 0x7fffffff || b <= 0x7fffffff) {
return low;
}
var hi = rshift(a, 31) & rshift(b, 31);
return low + lshift(hi, 31);
}
function or(a, b) {
var low = (a | b) & 0x7fffffff;
if (a <= 0x7fffffff && b <= 0x7fffffff) {
return low;
}
var hi = rshift(a, 31) | rshift(b, 31);
return low + lshift(hi, 31);
}
function xor(a, b) {
var low = (a ^ b) & 0x7fffffff;
if (a <= 0x7fffffff && b <= 0x7fffffff) {
return low;
}
var hi = rshift(a, 31) ^ rshift(b, 31);
return low + lshift(hi, 31);
}
function rshift(num, bits) {
return num <= 0x7fffffff ? num >> bits :
Math.floor(num / Math.pow(2, bits));
}
编辑:修复了或中的一个错误,添加了xor
相关文章:
- Javascript通过列表项的函数和css来更改背景颜色
- 正在执行函数列表jquery
- 在数组上执行函数列表
- Javascript 动态创建一个函数列表
- Javascript:给定函数列表,如何创建一个将这些函数作为属性的对象
- CouchDB:Erlang 函数列表
- 用函数列表敲除foreach
- 可能调用的自定义函数列表
- 如何使用jEdit获取JavaScript文件的函数列表's Mac上的Sidekick
- node.js:将一个异步函数列表应用于列表列表中的每一项
- 通过函数名称执行函数列表
- 如何正确地按顺序调用异步函数列表
- 从eval中获取函数列表
- 是否有ide给出php内部的js函数列表
- JavaScript:连续调用对象上的函数列表
- jQuery(窗口)的可用函数列表
- 在java中使用scriptenengine,我如何提取函数列表
- 原型中的函数列表
- JavaScript中位运算符的克隆函数列表
- 使用RHINO API在Java中提取js文件中的函数列表