gpt4 book ai didi

javascript - 在 > 32 位整数上使用按位运算符

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:49:14 25 4
gpt4 key购买 nike

我使用按位运算来表示一个整数内的许多访问控制标志。

ADMIN_ACCESS = 1;
EDIT_ACCOUNT_ACCESS = 2;
EDIT_ORDER_ACCESS = 4;

var myAccess = 3; // ie: ( ADMIN_ACCESS | EDIT_ACCOUNT_ACCESS )

if ( myAccess & EDIT_ACCOUNT_ACCESS ) { // check for correct access
// allow for editing of account

}

其中大部分发生在我项目的 PHP 端。然而,有一篇文章在保存某人的访问级别时使用 Javascript 使用 | 加入多个访问标志。这在一定程度上工作得很好。我发现一旦整数(标志)变得太大(> 32 位),它就无法再与 Javascript 中的按位运算符一起正常工作。例如:

alert( 4294967296 | 1 ); // equals 1, but should equal 4294967297

我正在尝试为此找到一个解决方法,这样我就不必将访问控制标志的数量限制为 32 个。每个访问控制标志都是前一个控制标志的两倍,这样每个控制标志就不会干扰其他控制标志控制标志。

dec(4) = bin(100)
dec(8) = bin(1000)
dec(16) = bin(10000)

我注意到,当将这些标志中的两个与一个简单的 + 一起添加时,它似乎会得到与按位 操作相同的答案,但是我我无法确定这是否是一个简单的替换,或者这样做是否存在问题。任何人都可以评论此解决方法的有效性吗?示例:

(4294967296 | 262144 | 524288) == (4294967296 + 262144 + 524288)

最佳答案

只要您确定每个标志都是 2 的幂,并且您不要超过 52 位(由于数量为 Double-precision float),只需添加标志即可。可以持有,因为这就是 JS 用于数字的方式)。

如果出于某种原因,您需要超过 52 个标志,我建议将这些标志分组。

关于javascript - 在 > 32 位整数上使用按位运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12631171/

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