Javascript 八进制数的位运算

Javascript 八进制数的位运算,javascript,bit-manipulation,bitwise-operators,bit-shift,Javascript,Bit Manipulation,Bitwise Operators,Bit Shift,我想用javascript对变量执行一些位操作。我有以下数字: 最小值:153391689(基数10)-1111111(基数8) 最大值:1073741823(基数10)-7777(基数8) 现在我想用这个变量来存储10个“变量”,选项从0到7。 为此,我需要获取并设置每个八进制数字(表示3位)。 不幸的是,我没有成功,但我带来了一些东西: var num = 153391689; function set(val, loc) { num |= val

我想用javascript对变量执行一些位操作。我有以下数字:

最小值:153391689(基数10)-1111111(基数8) 最大值:1073741823(基数10)-7777(基数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);
     }
var num=153391689;
功能集(val、loc){

num |=val正如Amit在注释中提到的,set函数在设置值之前不会清除位,因此如果该位置已经有值,则新值将与其进行或运算

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

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

您的
集合
从不清除任何位。按位操作只对双数有效。
 function get(loc) {
     return (num >> (loc * 3)) & 7;
 }