Javascript中的 “&” 和 “|” 具体有什么作用?如何进行使用?
Posted LL
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Javascript中的 “&” 和 “|” 具体有什么作用?如何进行使用?相关的知识,希望对你有一定的参考价值。
在本文开始之前,我想给大家介绍几个话题
变量num1=1&0;
控制台.log(num1);//0
var num2=\'字符串\'&1;
控制台.log(num2);//0
var num3=真&1;
控制台.log(num3);//1
var num4=未定义|假;
控制台.log(num4);//0
var num5=未定义|真;
控制台.log(num5);//1
var num6=23和5;
控制台.log(num6);//5
var num7=23 | 5;
控制台.log(num7);//23
以上问题你们都答对了吗?我们之前总结了javascript中的“&&”和“|”;“&&”和“|”是逻辑运算表达式中的运算符。“&”或“|”是什么意思?有什么特点?接下来,让我们逐一揭开秘密。
首先,我们需要弄清楚“&”和“|”是位运算符。
位运算符用于在最基本的级别上操作值,也就是说,由内存中表示值的位来操作。ECMAScript中的所有值都以IEEE-754 64位格式存储,但位运算符不直接对64位值进行操作。相反,首先将64位值转换为32位整数,然后执行该操作,最后将结果转换为64位。对于开发人员来说,因为64位存储格式是透明的,所以整个过程就像只有32位整数。
对于有符号整数,32位中的前31位用于表示整数的值。位32是值的符号:0是正数,1是负数。表示符号的位称为符号位。符号位的值决定其他位值的格式。正数以纯二进制格式存储,31位中的每一位表示2的幂。第一位(称为位0)表示20,第二位表示21,依此类推。未使用的位用0表示,0被忽略。例如,值18的二进制表示是0000 00010010,或者更简洁地说是10010。这是五个有效位,用于确定实际值。
负数也存储在二进制代码中富拓跟单但使用的格式是二进制补码。计算值的二进制补码有三个步骤
(1) 求这个值的绝对值的二进制码(例如,求-18的二进制补码,先求18的二进制码);
(2) 求二进制逆码,即用1代替0,用0代替1;
(3) 在二进制反码中加1。
这样,获得-18的二进制表示,即1111 1111 1111 1111 1111 1110 1110。
... 在ECMAScript中,当一个位运算符应用于一个值时,在后台会发生以下转换过程:将64位值转换为32位值,然后执行位操作,最后将32位结果转换回64位值。这样,看起来就像是在操纵32位值,就像在其他语言中以类似的方式执行二进制操作一样。但这种转换过程也会导致严重的副作用,即当对特殊的Nan和无穷大值应用位运算时,这两个值都将被视为0。
如果位运算符应用于非数值,则在应用位运算之前,将使用number()函数将值转换为数值(自动完成)。结果将是一个数值。。。(截取自JavaScript高级编程)
2、 “&”(按位AND和):”
按位and运算符由一个和字符(&)表示,它有两个运算符编号。本质上,按位与运算是将两个数值的每一位对齐,并对同一位置的两个数字执行与运算。
逐位and运算规则:只有两个数值对应的位都为1时,才返回1。如果任何位为0,结果将为0。
我谈了太多理论的东西,但我认为理论是必要的。接下来,让我们直接分析示例!
让我们首先看看上面主题中的num1、num2、Num3和num6。我们试图结合上述理论来分析为什么最终的结果会被输出。
//Num1是按位“与”运算后1和0的返回值。1的二进制代码缩写为1,0的二进制代码缩写为0。根据上述规则,第二个运算符编号为0,结果为0
变量num1=1&0;
控制台.log(num1);//0
//第一个运算符编号是字符串。根据前言中的理论,对于非数字运算符,首先使用number()函数,结果返回Nan,将被视为0。所以最终结果是0
var num2=\'字符串\'&1;
控制台.log(num2);//0
//True是一个布尔类型值,也由number()函数处理。经过处理,得到值1,因此该表达式相当于位运算的“1&1”。当两个值都为1时,结果返回1
var num3=真&1;
控制台.log(num3);//1
//23的二进制代码是。。。10111,5的二进制代码是。。。00101
以上是关于Javascript中的 “&” 和 “|” 具体有什么作用?如何进行使用?的主要内容,如果未能解决你的问题,请参考以下文章