gpt4 book ai didi

javascript - JavaScript 中位运算符的克隆函数列表?

转载 作者:行者123 更新时间:2023-11-29 21:21:07 26 4
gpt4 key购买 nike

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 函数,我不确定在移位不会溢出 32 位的情况下进行一些检查是否会有所返回,并在这种情况下使用常规移位操作:它可能会减少复杂的操作,但它会还添加检查和分支...

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));
}

编辑:修复了 or 中的错误,添加了 xor

关于javascript - JavaScript 中位运算符的克隆函数列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38511576/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com