gpt4 book ai didi

javascript - 如何在没有字符串的情况下在 Javascript 中操作位 52-32?

转载 作者:行者123 更新时间:2023-12-01 17:16:19 25 4
gpt4 key购买 nike

我有以下工作原型(prototype)代码:

function int2str(int, bits) {
const str = int.toString(2);
var ret = '';
for (var i = 0; i < (bits - str.length); ++i) {
ret += '0';
}
ret += str;
return ret;
}

function high32(u64) {
return parseInt(int2str(u64, 64).substr(0, 32), 2);
}

function low32(u64) {
return parseInt(int2str(u64, 64).substr(32, 32), 2);
}

function combine(low, high) {
return parseInt(int2str(high, 32) + int2str(low, 32), 2);
}

如果没有字符串,我可以更有效地做到这一点吗?

(Javascript 中的按位运算符转换为 32 位整数,使它们无用。)

最佳答案

只是忽略标志并让标志通过。使用除法和转换为 32 位整数以获得高位,并为低位取模。

const POW2_32 = (1<<16)*(1<<16)

function high32(u64) {
return (u64/POW2_32)|0
}

function low32(u64) {
return u64%POW2_32
}

function combine(low, high) {
return high * POW2_32 + low
}

如果您想接受带符号的数字:

function high32(u64) {
return (u64/((1<<16)*(1<<16)))
}

function low32(u64) {
return Math.abs(u64%((1<<16)*(1<<16)))
}

function combine(low, high) {
return (high<0?-1:1) * // if high32 is neg, whole number is neg
(Math.abs(high * POW2_32) + Math.abs(low|((low<0)<<15)))
// if low bit is neg, set highest low bit
}

此外,如果您需要为 Math.trunc 的高位捕获超过 32 位,您当然需要更改所有内容以使用 BigInt(因此 1n<<16n 而不是 1<<16)

关于javascript - 如何在没有字符串的情况下在 Javascript 中操作位 52-32?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62550797/

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