移位运算符的使用场景有哪些_移位运算符的使用场景有哪些

移位运算符的使用场景有哪些_移位运算符的使用场景有哪些js位运算符和使用场景-前言:Js存储Number类型,无论是浮点数还是整数,都是采用的双精度存储(64)位,因为位操作符不能操作64位的,所以会先转成32位的整数。计算机在存储整数的时候都是以补码的形式存储的,正数的补码就是本身,负数是反

js位运算符和使用场景   -   前言:   Js存储Number类型,无论是浮点数还是整数,都是采用的双精度存储(64)位,因为位操作符不能操作64位的,所以会先转成32位的整数。   计算机在存储整数的时候都是以补码的形式存储的,正数的补码就是本身,负数是反码+1。   位运算   1、~  : 按位非(NOT)   2、& : 按位与(AND)   3、| : 按位或(OR)   4、^ : 按位异或(XOR)   5、<< : 左移   6、>> : 有符号右移   7、>>> : 无符号右移   一、(~)按位非(NOT)   按位非~会将数值的32位二进制的每一位取反(0变为1,1变为0)。按位非的操作符的本质取操作数负值,然后减1。   拿10举例:   0000 0000 0000 0000 0000 0000 0000 1010 // ~ NOT 1111 1111 1111 1111 1111 1111 1111 0101   ~10 = -11   ~10.6 = -11   ~-1 = 0   使用场景:向下取整   ~~-1.5 = -1.5   ~~1.5 = 1.5   二、(&)按位与(AND)   按位与&, 本质上将两个操作数的32位二进制数的每一位对齐。然后按如下的规则取值,1 & 1 等于 1; 1 & 0 等于 0;0 & 1 等于0;0 & 0等于0。   两个都是1则为1,否则为0.   举例10&5 = 0   0000 0000 0000 0000 0000 0000 0000 1010 // & AND 0000 0000 0000 0000 0000 0000 0000 0101 // 等于 0000 0000 0000 0000 0000 0000 0000 0000   这个使用场景不多   三、(|)按位或(OR)   按位与|, 本质上将两个操作数的32位二进制数的每一位对齐。然后按如下的规则取值,1 | 1 等于 1; 1 | 0 等于 1;0 | 1 等于1;0 | 0等于0。   有一个为1,就为1,否则为0.   举例10|5 = 15   0000 0000 0000 0000 0000 0000 0000 1010 // & OR 0000 0000 0000 0000 0000 0000 0000 0101 // 等于 0000 0000 0000 0000 0000 0000 0000 1111   常用场景:   取整,和按位非的作用一样   按位与,任何数与0都为那个数字,1|0等于1,0|0等于0,那么我们知道按位操作的时候会转为32位整数,运算过之后才存储到64位中,那么我们就可以根据这一点来进行取整,因为转成32位整形会舍掉小数部分.   0|0=0   0.6|0 = 0   -1.2|0 = -1   四、(^)按位异或(XOR)   按位异或^, 本质上将两个操作数的32位二进制数的每一位对齐。然后按如下的规则取值,1 ^ 1 等于 0; 1 ^ 0 等于 1;0 ^ 1 等于1;0 ^ 0等于0。   两个一样就为0,不一样就为1;   举例10^5=15   0000 0000 0000 0000 0000 0000 0000 1010 // ^ XOR 0000 0000 0000 0000 0000 0000 0000 0101 // 等于 0000 0000 0000 0000 0000 0000 0000 1111   常用场景:   1.不使用额外的空间交换两个数(一般用第三方变量或es6的结构赋值)   在了解这个之前先了解两个准则   (1)两个相同的数进行按位异或等于0   (2)任意一个数与0进行按位异或等于自身   // 两个都是整数时可以使用 let a = 2; let b = 3; a = a^b; b = a^b; a = a^b; console.log(a, ‘a’); // 3 console.log(b, ‘b’); // 2   五、(<<)左移   左移(<<)将32位二进制向左移动指定的位数,空缺的位将会使用0填充。左移不会影响符号位。   举例:将5左移2位     5<<2= 20   使用场景   乘法   左移是乘法,移动的位数是2的幂数   1<<0=1   1<<1=2   1<<2=4   -1<<2=-4   -1.2<<2=-4   六、(>>)有符号右移   右移(>>)将32位二进制向右移动指定的位数,但是保留符号位,右移空缺的符号位使用0填充。符号位0代表正数,1代表负数   举例:将31有符号右移3位,等于3。  31>>3=3   0|000 0000 0000 0000 0000 0000 0001 1111 // >>3 0|000 0000 0000 0000 0000 0000 0000 0011   使用场景   除法   右移是除法,移动的位数是2的(幂数 × -1)   2>>0 = 2   2>>1=1   4>>2=1   8>>3=1   -2>>1=-1   -2.6>>1=-1   七、(>>>)无符号右移   无符号位右移,会将所有32位数都向右移动。对于正数来说右移和无符号位右移的结果是一致的。   举例:将-31无符号右移28位。   1111 1111 1111 1111 1111 1111 1110 0001   // 负数的表示方法是反码+1   1000 0000 0000 0000 0000 0000 0001 1110 // -30-1=-31 // >>> 28 0000 0000 0000 0000 0000 0000 0000 1111 // 15       -

2024最新激活全家桶教程,稳定运行到2099年,请移步至置顶文章:https://sigusoft.com/99576.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。 文章由激活谷谷主-小谷整理,转载请注明出处:https://sigusoft.com/39095.html

(0)
上一篇 2024年 9月 8日
下一篇 2024年 9月 8日

相关推荐

关注微信