在网上看到一段代码,
pairs.add((i << 16) | j);//i和j是整数
.......
.......
pairs.forEach((key) => {
var i = (key >> 16) & 0xffff;
var j = key & 0xffff;
.......
});
<<,|,&是位运算符,它们的意义我明白,但是这种写法不太明白是表达或计算什么。
在网上看到一段代码,
pairs.add((i << 16) | j);//i和j是整数
.......
.......
pairs.forEach((key) => {
var i = (key >> 16) & 0xffff;
var j = key & 0xffff;
.......
});
<<,|,&是位运算符,它们的意义我明白,但是这种写法不太明白是表达或计算什么。
pairs中把ij合并成了一个数字,而通过下面的forEach又把数字还原回来了,感觉不像加密。
倒推回去i = (key >> 16) & 0xffff;j = key & 0xffff;
那么((i << 16) | j)=(((key >> 16) & 0xffff) << 16)|(key & 0xffff)=(key & (0xffff<<16))|(key & 0xffff),前者取key的高16位,后者取key的低16位,两者进行或运算就成了key,这是把两个数组成一个数储存,用的时候再解析出来。再根据pairs这个结构的命名,可能是一种tuple的js实现?