在看《深入浅出node.js》的buffer这章时,看到以下这段代码: new Buffer(1024); this.parent = pool; this.offset = pool.used; pool.used += this.length; if (pool.used & 7) pool.used = (pool.used + 8) & ~7;
其大意是:当前Buffer对象的parent属性指向该slab,并记录下是从这个slab的哪个位置( offset)开始使用的, slab对象自身也记录被使用了多少字节, 但我一直没理解 ** if (pool.used & 7) pool.used = (pool.used + 8) & ~7** 这句话的意思和作用,上网搜了一发也没找到答案,有知道的大神恳请指导指导,非常感谢!
@xsTao if (pool.used & 7)这个括号内pool.used的值只要8的倍数或者0都为0(正负8/16/32…),就是false了。应该是(pool.used + 8)先执行,然后这个值再和取反的7做按位与运算。又因为pool.used不能为8的时候才能进 if 条件。pool.used不为0并且不是8的倍数。好。假设pool.used是0或者8的倍数,设(pool.used)为x,x&~7结果就是0。