我想在变量的javascript中做一些操作。我有这个数字:
min:153391689(基数10) - 1111111111(基数8) 最大值:1073741823(基数10) - 7777777777(基数8)
现在我想用这个变量存储10" vars"选项从0到7。 为此,我需要获取并设置每个八进制数字(意味着3位)。 不幸的是,我没有成功,但我带来了一些东西:
DoIt
谢谢。
答案 0 :(得分:2)
正如Amit在评论中所提到的,你的set函数在设置值之前不会清除这些位,所以如果该位置已经存在一个值,则新值将与它进行OR运算。
您可以通过使用该位置的位掩码的按位NOT对数字进行与运算来清除位置。对掩码应用按位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;
}