Javascript 八进制数的位运算
我想用javascript对变量执行一些位操作。我有以下数字: 最小值:153391689(基数10)-1111111(基数8) 最大值:1073741823(基数10)-7777(基数8) 现在我想用这个变量来存储10个“变量”,选项从0到7。 为此,我需要获取并设置每个八进制数字(表示3位)。 不幸的是,我没有成功,但我带来了一些东西: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
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;
}