乐趣区

关于javascript: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

退出移动版