八进制数的按位运算

时间:2015-07-22 15:30:28

标签: javascript bit-manipulation bitwise-operators bit-shift

我想在变量的javascript中做一些操作。我有这个数字:

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

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

DoIt

谢谢。

1 个答案:

答案 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;
 }