1,“与”运算(&)
a&b
规则:0&0=0;0&1=0;1&0=0;1&1=1
(只要有一个数是0,值为0)
例子:
const a = 5; // 00000000000000000000000000000101
const b = 3; // 00000000000000000000000000000011
const c = 7; // 00000000000000000000000000000111
console.log(a & b); // 00000000000000000000000000000001
console.log(a & c); // 00000000000000000000000000000101
a与b的值为1
a与c的值为5
2,“非”运算(~)
a~b
const a = 5; // 0000000000000101
console.log(~a); // 1111111111111010
// 值为: -6
const b = -3; // 1111111111111101
console.log(~b); // 0000000000000010
// 值为: 2
先取反,如果是“正数”,值为正数;
先取反,如果是“负数”,保留第一位符号位,其余数字取反再加一,值为负数数
3,“或”运算(|)
a|b
规则:0|0=0;0|1=1;1|0=1;1|1=1;
(只要有一个数是1,值为1)
const a = 5; // 00000000000000000000000000000101
const b = 3; // 00000000000000000000000000000011
console.log(a | b); // 00000000000000000000000000000111
// 值为: 7
4,“异或”运算(^)
a^b
规则:0 ^ 0=0;0 ^ 1=1;1 ^ 0=1;1^1=0;
const a = 5; // 00000000000000000000000000000101
const b = 3; // 00000000000000000000000000000011
console.log(a ^ b); // 00000000000000000000000000000110
// 值为: 6
5,按位“与赋值”(&=)
其实
let a = 5; // 00000000000000000000000000000101
a &= 3; // 00000000000000000000000000000011
相当于:a = a & 3
console.log(a); // 00000000000000000000000000000001
// 值为: 1
其实就是运算符的缩写形式,同理的还有 “|=” , “^=”
附录:
我们在数字电路中的二进制表示形式是机器数,把一个数的最高位作为符号位,0表示“+”,1表示“-”。二进制正负数的表示法有原码、反码、补码。
如果符号为0,即是正数,三种表示法都是一样的,随后是二进制数的绝对值。
对于负数的表示法是不一样,如下:
1、 原码
负数符号位1,接着是二进制数的绝对值。
如(-9)的原码=(1001001)
2、 反码
负数符号位1,接着对剩下的位二进制取反。
如(-9)反码=(1110110)
注意符号位不参与取反
3、 补码
负数符号位1,接着是二进制的补码。补码通过反码加1得到。
如(-9)补码=(1110111)