<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>位运算符</title>
</head>
<body>
</body>
<script type="text/javascript">
// 将数字转化为二进制
var num1 = 18;
console.log(num1.toString(2));
// ~ NOT 运算符, 本质取反减一
var num2 = -12;
console.log(~num2);
// & AND 运算符, 直接对数字的二进制形式进行运算
// 计算规则, 只有都为1才为1, 否则为0
// 25 = 0000 0000 0000 0000 0000 0000 0001 1001
// 3 = 0000 0000 0000 0000 0000 0000 0000 0011
// AND = 0000 0000 0000 0000 0000 0000 0000 0001
var num3 = 25 & 3;
console.log(num3);
// | OR 运算符, 直接对数字的二进制形式进行运算
// 计算规则, 只要有一个是 1, 就为 1, 否则为 0
// 25 = 0000 0000 0000 0000 0000 0000 0001 1001
// 3 = 0000 0000 0000 0000 0000 0000 0000 0011
// OR = 0000 0000 0000 0000 0000 0000 0001 1011
var num4 = 25 | 3;
console.log(num4);
// ^ XOR 运算符, 直接对数字的二进制形式进行运算
// 计算规则, 只要有一个是 1 一个是 0 则为 1, 否则为 0
// 25 = 0000 0000 0000 0000 0000 0000 0001 1001
// 3 = 0000 0000 0000 0000 0000 0000 0000 0011
// XOR = 0000 0000 0000 0000 0000 0000 0001 1010
var num5 = 25 ^ 3;
console.log(num5);
// << 左移运算符, 它把二进制数字中的所有数位向左移动指定的数量
var num6 = 2 << 5;
console.log(num6);
// >> 有符号右移运算符, 它把 32 位数字中的所有数位整体右移
var num7 = 64 >> 5;
console.log(num7);
// >>> 无符号右移运算符, 它将无符号 32 位数的所有数位整体右移, 慎重使用
var num8 = -64 >>> 5;
console.log(num8);
</script>
</html>