js计算,与或非,按位与运算符


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)


版权声明:本文为lin_s_c原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。