Javascript运算符——对位运算符的全面描述

Javascript运算符——对位运算符的全面描述
在前面的话

运算符是一种非常低级别的操作,由于它不直观,所以不经常使用。但是,速度非常快,合理的使用可以取得良好的效果。

二进制表示

在ECMAscript所有的值存储在IEEE-754 64位格式,但一些运营商不直接对64位值的操作,但是它们的32位有符号整数,并返回值也是一个32位有符号整数。

这个数字允许当特殊的南方和无穷大值被应用时,这两个值被处理为0。

如果使用非数字位运算符,则使用数字()将值转换为数字重新应用的位操作,结果是一个值。
/ / |位或整数,0位或操作本身就是一种十进制和0位或操作可以整体效果
console.log(1.3 | 0); / / 1
console.log(1.8 | 0); / / 1
console.log(无限| 0); / / 0
console.log(无穷| 0); / / 0
console.log(南| 0); / / 0
console.log('12px| 0); / / 0
console.log(12'| 0); / / 12
的带符号的整数,用32位的前31位表示整数的值,第三十二位表示整数的符号,0为正,1为负。一位代表一个符号称为符号位,和一个符号位的值决定了其他位的值格式。这,正是以纯二进制格式存储,每31位代表一个功率2。第一位(位0)表示2的0次,和第二代表1,2,等等,不使用位填充为0,这是无视

例如,18的值的二进制表示形式是000000000000000000000000000 10010,或更简洁的10010。这是5个有效位,而5位自己确定实际价值。
(console.log(18),ToString(2)); / / 10010

console.log(0b00000000000000000000000000010010); / / 18

负数也存储在二进制中,但是使用的格式是二进制补码:

(1)数值绝对值的二进制代码。

{ 2 }二进制补码,将取代0 1 1,将取代0。

{ 3 }是1个的}。

例如,要确定二进制18的二进制表示,必须首先得到二进制表示的18,如下所示:
0000000000000000 00000000000 10010
接下来,计算二进制补码,如下所示:
1111111111111111 11111111111 01101
最后,在一个补加1中,如下所示:
1111111111111111 11111111111 01101

---------------------------------------
1111111111111111 11111111111 01110
因此,- 18的二进制表示为1111111111111111 11111111111 01110。

ECMAscript会试图隐藏这些信息,以二进制形式的消极的字符串输出,我们只看到负二进制编码的绝对值前面加一个负号
var = 18;
console.log(num.tostring(2)); / / 10010
The bit operator can perform 7 operations, including bitwise non NOT, bit by bit (AND), bit by bit or (OR), bitwise XOR (XOR), left shift, signed right shift and unsigned right shift.

一点一点地(不是)

根据非算子的符号(~)说,其结果是根据非数值代码返回执行。其实质是操作数的负价值减少1
VaR num1 = 25;
VaR num2 = ~ num1;
console.log(num2); / / 26
对于一个二位整数,它可以得到它自己;对于一个二位小数的舍入效果可以得到。
console.log(~ ~ 3); / / 3
console.log(~ ~ 3.1); / / 3
console.log(~ ~ 3.9); / / 3
一点一点地(和)

位和运算符用符号()和符号()表示,它有两个操作符。然后,根据下表中的规则,对同一位置上的两个数字执行和操作。
第一个值的第二个数值的位结果。
一百一十一
一百
010
000
只有当两个值的相应位为1,且任何一个为0时,位和操作返回到1,结果是0。
VaR iResult = 253;
console.log(iResult); / / 1
分析如下
25 = 0000000000000000 00000000000 11001
3 = 0000000000000000 00000000000000 11
---------------------------------------------
= 0000000000000000 000000000000000 1
按位或(或)

用管道符号或操作位(|)说,还有两个操作数,以下事实表按位或操作

第一个值的第二个数值的位结果。
一百一十一
一百零一
011
000
当一位为1时,一位或操作返回1,只有当两位都为0时,只有0返回到0。
VaR iResult = 25 | 3;
console.log(iResult); / / 27
分析如下
25 = 0000000000000000 00000000000 11001
3 = 0000000000000000 00000000000000 11
中国
或= 0000000000000000 00000000000 11011
一个0位或操作整数本身就是一个十进制和0位或操作可以整体效果
console.log(3.1 | 0); / / 3
console.log(3.9 | 0); / / 3
逐位或(XOR)

逐位或运算符用插入符号(1)表示,并且有两个操作数。
第一个值的第二个数值的位结果。
一百一十
一百零一
011
000
当两个值相等或0时返回到0,同时不返回1。
VaR iResult = 25 ^ 3;
console.log(iResult); / / 26
分析如下
25 = 0000000000000000 00000000000 11001
3 = 0000000000000000 00000000000000 11
---------------------------------------------
异或= 0000000000000000 00000000000 11010
一个特殊的操作具有特殊用途的两个连续的数字A和B三奇数或其他操作,A = B,B = A = B,和他们的价值观可以互换,这意味着一个异或运算的使用可以交换两个变量的值,而不引入临时变量。
var a=10,b=9;
A,B,B,A,B;
console.log(A,B); / / 9
分析如下
a = 0000000000000000 000000000000 1010
b = 0000000000000000 000000000000 1001
---------------------------------------------
A1 = 0000000000000000 00000000000000 11

A1 = 0000000000000000 00000000000000 11
b = 0000000000000000 000000000000 1001
---------------------------------------------
B1=0000000000000000 000000000000 1010

B1=0000000000000000 000000000000 1010
A1 = 0000000000000000 00000000000000 11
---------------------------------------------
A2=0000000000000000 000000000000 1001
= A2 = 10;b = B1=9
一个整数,0按位异或可以维持自身,十进制和0位异或可以是圆形的
console.log(3.1 ^ 0); / / 3
console.log(3.9 ^ 0); / / 3
左移

左移算子由两个较小的数字表示。

例如,如果数字2(二进制代码10)被移动到左5位,则结果为64(1000000)。
var属性的旧值= 2;
VaR风险价值=属性的旧值< 5;
console.log(价值); / / 64
左移位不影响操作数的符号位,换句话说,如果将2 - 64移动到左5位,结果将为-。
var属性的旧值= 2;
VaR风险价值=属性的旧值< 5;
console.log(价值); / / 64
左移位0可以达到舍入的效果。
console.log(3.1<<0); / / 3
console.log(3.9<<0); / / 3
在右边签名

符号右移运算符用两个较大的数字(>)表示,该值将值右移,但保留符号位(即正符号和负符号)。符号右移与左移位操作相反,也就是说,如果将64移动到右5位,结果将返回到2位。
var属性的旧值= 64;
无功价值=属性的旧值> > 5;
console.log(价值); / / 2
同样,在转移的过程中,会有一个空缺的原有价值。只有这一次的空缺出现在原始值的左侧和右侧的标志点,在这一点上,ECMAscript将填补所有的空间与符号位的值来获得一个完整的价值。

右移可以模拟2的除法运算。
console.log(5>>1); / / 2
console.log(15>>1); / / 7
无符号右移

无符号右移运算符大于3(> >),表示该运算符将所有数值32右移,对于正数,无符号右移的结果与符号右移是一样的,它仍然移动到符号前面的右边,如果64个无符号右移5,结果仍然是2。
var属性的旧值= 64;
var属性的旧值> > > 5价值=;
console.log(价值); / / 2
但负面的数目是不同的。首先,无符号右移满0,而随着符号位如右标志的值填充的空间。因此,无符号右移到正数,右移相同,但负数结果不同的是,第二,无符号右移操作符将负二进制编码作为一种积极的二进制代码。此外,因为负数的绝对值的二进制补码形式表示,无符号右移的结果将是非常大的。
var属性的旧值= 64;
var属性的旧值> > > 5价值=;
console.log(价值) / / 134217726
要确定二进制64的二进制表示,必须首先得到二进制表示的64,如下所示:
0000000000000000 000000000 1000000
接下来,计算二进制补码,如下所示:
1111111111111111 111111111 0111111
最后,在一个补加1中,如下所示
1111111111111111 111111111 0111111

---------------------------------------
1111111111111111 1111111111 000000
在向右侧移动5个位置后,以下内容如下:
00000 11111111111 111111111111111 0

console.log(0b00000111111111111111111111111110); / / 134217726
常见的应用

乘法运算(1)

利用左移位进行乘法运算。
console.log(2<<1); / / 4
console.log(3<<1); / / 6
console.log(4<<1); / / 8
(2)除法运算

使用符号右移(>)来模拟2的除法运算。
console.log(2>>1); / / 1
console.log(5>>1); / / 2
console.log(8>>1); / / 4
console.log(9>>1); / / 4
{ 3 }值交换

交换值的效果可以通过使用一个外部操作来实现()
var a=10,b=9;
A,B,B,A,B;
console.log(A,B); / / 9
{ 4 }十进制整数

拿两次,和0位按位或按位异或,0,左0,右0位小数舍入效果可达到
console.log(~ ~ 3.1); / / 3
console.log(3.1 | 0); / / 3
console.log(3.1 ^ 0); / / 3
console.log(3.1<<0); / / 3
console.log(3.1>>0); / / 3
{ 5 }开关

一个位运算符可以用作设置对象属性的开关。假设一个对象有四个开关,每个开关都是一个变量。因此,你可以设置二进制数为四位,每个位对应一个开关。
无功flag_a = 1; / / 0001
无功flag_b = 2; / / 0010
无功flag_c = 4; / / 0100
无功flag_d = 8; / / 1000
上面的代码设置了四个开关,分别是A、B、C和D,每一个分别占用一个二进制位。

现在假设你需要打开三个开关ABD,我们可以构造一个面膜变。
VaR的面具= flag_a flag_b flag_d | |;
0001 / 0010 | | 1000 = 1011
上面的代码执行或运行在ABD三个变量,得到1011的掩码值为二进制。
操作可以确保开关打开指定的位置。
国旗国旗| =面膜;
并且操作可以与所有当前设置和开关设置不一样,全部关闭
标志=标志掩码;
异或开关(切换)是当前设置的第一个实现,可以得到当前设置的相反值,再次执行并获得原始值。
标志=标志;
操作是否可以在操作1之后翻转当前设置,即设置为0;在操作为0之后,原始设置为1。
旗帜=旗帜;
上面的Javascript操作,位操作,是一个全面的介绍的所有内容,萧边分享给你。我希望能给你一个参考,希望你能支持它。
免责声明:本网信息来自于互联网,目的在于传递更多信息,并不代表本网赞同其观点。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,并请自行核实相关内容。本站不承担此类作品侵权行为的直接责任及连带责任。如若本网有任何内容侵犯您的权益,请及时联系我们,本站将会在24小时内处理完毕。
相关文章
返回顶部