名词介绍
有符号: 无符号表示全部的整数,包含负数和正数
无符号: 有符号代表全部是正整数,不包含负数的整数
源码: 计算机存储数字都是以二进制进行存储,并且第一位 数字为 0 表示正数, 1表示负数,所以二进制称为源码, 比如 2 的二进制 0000 0010
反码: 对所有二进制进行取反操作, 1 变成 0, 0变成 1, 当前数字为负数时,第一位数字不变(代表正负数), 比如 2 的反码 0111 1101, -2 的反码 1111 1101
补码: 所有负数都是以补码进行存储,补码表现形式为 先求出反码, 接着+ 1 ,比如 -2 的源码为 1000 0010, 反码为 1111 1101, 补码为 1111 1110
符号介绍
1.按位与(&)
| 参数1 | 参数2 | 结果 |
|---|---|---|
| 1 | 1 | 1 |
| 1 | 0 | 0 |
| 0 | 1 | 0 |
| 0 | 0 | 0 |
| 参数1 | 参数2 | 结果 |
|---|---|---|
| 0001 | 0001 | 0001 |
| 1100 | 1101 | 1100 |
使用场景 (平时在判断奇偶数的情况下使用):
(4 & 1) === 0 // true 偶数
(5 & 1) === 0 // false 奇数
(15 & 1) === 0 // false 奇数
2.按位或(|)
| 参数1 | 参数2 | 结果 |
|---|---|---|
| 1 | 1 | 1 |
| 1 | 0 | 1 |
| 0 | 1 | 1 |
| 0 | 0 | 0 |
| 参数1 | 参数2 | 结果 |
|---|---|---|
| 0001 | 0001 | 0001 |
| 1100 | 1101 | 1101 |
使用场景 (向下取整, 相当于Math.floor):
1.4 | 0 = 1
1.8 | 0 = 1
4.2 | 0 = 4
3.按位异或 (^)
| 参数1 | 参数2 | 结果 |
|---|---|---|
| 1 | 1 | 0 |
| 1 | 0 | 1 |
| 0 | 1 | 1 |
| 0 | 0 | 0 |
| 参数1 | 参数2 | 结果 |
|---|---|---|
| 0001 | 0001 | 0000 |
| 1100 | 1101 | 0001 |
使用场景 (交换两个数):
// 原始解法,使用额外空间
let a = 2;
let b = 3;
let temp = a;
a = b;
b = temp;
// 使用按位异或 (^) 解决
let a = 2;
let b = 3;
a = a ^ b;
b = a ^ b;
a = a ^ b;
// 是不是有点懵了,原理如下,需要细品
// 如果
a ^ b = c
// 那么
c ^ b = a
c ^ a = b
注意:异或运算支持运算的交换律和结合律
4.左移(<<)
2 << 2 = 6;
图解:
0000 0000 0000 0010
--------------------
0000 0000 0000 1000
5.有符号右移(>>)
-4 >> 1 = -2;
图解:
1000 0000 0000 0100
--------------------
1000 0000 0000 0010
6.无符号右移 (>>>)
2 >>> 1 = 1;
图解:
0000 0000 0000 0010
--------------------
0000 0000 0000 0001

196

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



