gpt4 book ai didi

javascript - 八进制数的按位运算

转载 作者:行者123 更新时间:2023-12-02 15:55:40 24 4
gpt4 key购买 nike

我想在 javascript 中对变量进行一些位运算。我有这个数字:

分钟:153391689(基数 10)- 1111111111(基数 8)最大值:1073741823(基数 10)- 7777777777(基数 8)

现在我想使用这个变量来存储 10 个“变量”,选项从 0 到 7。为此,我需要获取并设置每个八进制数字(即 3 位)。不幸的是,我没有成功,但我带来了一些东西:

     var num = 153391689;  
function set(val, loc) {
num |= val << (loc * 3);
}
function get(loc) {
return (num & 7 << loc * 3) / Math.pow(8, loc);
}

谢谢。

最佳答案

正如 Amit 在评论中提到的,您的 set 函数在设置值之前不会清除这些位,因此如果该位置已经有一个值,则新值将与其进行“或”运算。

您可以通过将数字与该位置的位掩码的按位 NOT 进行 AND 运算来清除该位置。对掩码应用按位 NOT 意味着只有不在位于您感兴趣的位置的位保持设置。

 function set(val, loc) {
num &= ~(7 << (loc * 3)); // clear bits
num |= val << (loc * 3); // set bits
}

请注意,(loc * 3) 周围的括号是可选的,因为 Javascript 的 order of operator precedence意味着即使没有它们,乘法也会在移位之前完成。

您的 get 函数看起来可以工作,但您可以简化它。您无需将位掩码左移、与运算然后再次右移(通过除法),只需右移然后掩码即可。这会将您感兴趣的位移至最低有效 3 位,然后使用 AND 屏蔽它们:

 function get(loc) {
return (num >> (loc * 3)) & 7;
}

关于javascript - 八进制数的按位运算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31567608/

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