项目开发过程中碰到了这样一段代码:

this.uuid = 'xxxxxxy_xxxx_xxxx_yxxx_xxxxxxxxxxxx'.replace(/[xy]/g,

function (c) {

var r = Math.random() * 16 | 0,

v = c == 'x' ? r : (r & 0x3 | 0x8);

return v.toString(16);

}).toUpperCase();

this.uuid=getCharacter("upper")+this.uuid;

​ 起初看到的时候,对单竖杠运算符’|‘不太理解,于是就在网上搜了一下,搜到的答案就好像是一个人写的,都是只介绍说,单竖杠’|‘可以用来取整运算,只保留整数部分。然后具体的运算规则,统一都是再说单竖杠’|'是将两个数转成二进制数后相加得到的结果,并给出例子

console.log(3|4); //7

console.log(8|3);//11

console.log(4|4);//4

​ 看到这里的时候,前两个用二进制相加是没有问题的,但是到’4|4’的时候,就让人不得其解了,因为二进制相加的4|4明明是8,怎么会是4;

3|4

011

100

----

111

3|4 = 7

8|3

1000

0011

-----

1011

8|3 = 11

4|4

100

100

----

1000

算到这里,4|4应该是为8,但是这浏览器执行的时候4|4为4

于是就觉得单竖杠’|‘会不会不是二进制相加的结果。于是我就去找了一下朋友问一下,朋友一语点醒梦中人,说单竖杠’|'并不是相加,而是二进制去位或,这样的解释的话,就不会有问题了。

首先,要知道位或的原理,即有一为一,全零为零

3|4

011

100

----

111

3|4 = 7

8|3

1000

0011

-----

1011

8|3 = 11

4|4

100

100

----

100

4|4 = 4

理到这里,才算浅浅明白单竖杠’|'的使用,记录下来,以防下次迷糊!

相关文章

评论可见,请评论后查看内容,谢谢!!!
 您阅读本篇文章共花了: