Javascript 位运算符
| 运算符 | 名称 | 描述 |
|---|---|---|
| & | AND | 如果两位都是1,则设置每位为1 |
| | | OR | 如果两位之一为1,则设置每位为1 |
| ^ | XOR | 如果两位只有一位为1.则设置每位为1 |
| ~ | NOT | 反转所有位 |
| << | 零填充左位移 | 通过从右推入 0 ,使最左边位脱落 |
| >> | 有符号右位移 | 通过从左推入最左位的拷贝来向右位移,使最右边位脱落 |
| >>> | 零填充右位移 | 通过从左推入来向右位移,是最右位脱落 |
&
实例:
5&1 ----- 00000101 & 00000001
1 ----- 00000001
==========================================
|
实例:
5|1 ------ 00000101 | 00000001
5 ------ 00000101
==========================================
^
实例:
5^1 ------ 00000101 ^ 00000001
4 ------ 00000100
==========================================
~ (反转所有位)
实例:
~5 ------ ~00000101
-6 ------ 11111010
==========================================
JavaScript 使用 32 位按位运算数
~5 ~0101 = 1010 = -10
JavaScript 将数字存储为 64 位浮点数,但所有按位运算都以 32 位二进制数执行。
在执行位运算之前,JavaScript 将数字转换为 32 位有符号整数。
执行按位操作后,结果将转换回 64 位 JavaScript 数。
上面的例子使用 4 位无符号二进制数。所以 ~ 5 返回 10。
由于 JavaScript 使用 32 位有符号整数,JavaScript 将返回 -6。
00000000000000000000000000000101 (5)
11111111111111111111111111111010 (~5 = -6)
有符号整数使用最左边的位作为减号。
这里要说一下关于 二进制 的一些概念:
二进制以最左边一位决定正负即:0为正 , 1为负
二进制的原码:当前数取绝对值转二进制 (负数需要符号位转1)
二进制的反码:正数:反码与原码相同,负数:当前二进制数符号位不变其余位取反即:0换成1 1换成0
二进制的补码:正数:补码与原码相同,负数:将当前二进制数的反码加1 即:
例:
5 的原码 00000000 00000000 00000000 00000101
5 的反码 00000000 00000000 00000000 00000101
5 的补码 00000000 00000000 00000000 00000101
-5 的原码 先取绝对值为 5 然后符号位+1为:
10000000 00000000 00000000 00000101
-5 的反码 符号位不变其余位置取反
11111111 11111111 11111111 11111010
-5 的补码 反码 +1
11111111 11111111 11111111 11111011
二进制转十进制
例 5的二进制数是 00000000 00000000 00000000 00000101
从右开始 20 * 1 + 21 * 0 + 22 * 1 = 5
十进制转二进制
例 10 转二进制数 00000000 00000000 00000000 00001010
从右开始 20 * 0 + 21 * 1 + 22 * 0 + 23 * 1 = 10
-10 转二进制数
先取绝对值得二进制数 00000000 00000000 00000000 00001010
再给其取反 11111111 11111111 11111111 11111010
再加1 11111111 11111111 11111111 11111011
相当于负数原码的补码
归纳
- 正数的原码,反码补码都相同
- 负数的反码为该数的原码除符号位取反,负数的补码为该数的反码加1
- 负数的二进制数即为负数的补码
- 符号位为1的二进制数转十进制数就是 十进制负数转二进制的逆运算(除符号位外-1,除符号位外取反,得到的结果转十进制)
注意哦
二进制转十进制要先补全位数哦,看符号位是0还是1 ,在判断怎么转换,直接转会出错哦
本文深入解析JavaScript中的位运算符,包括AND、OR、XOR、NOT、零填充左位移、有符号右位移和零填充右位移的运作原理及实例。探讨了JavaScript如何处理32位有符号整数进行位运算,以及二进制数的原码、反码、补码概念。
232

被折叠的 条评论
为什么被折叠?



