Bitwise operator ng JavaScript

Bitwise operator ng JavaScript

Operator Pangalan Paglalarawan
& AND Kung ang dalawang bit ay parehong 1, magtatakbo ang bawat bit na 1.
| OR Kung isa sa dalawang bit ay 1, magtatakbo ang bawat bit na 1.
^ XOR Kung ang dalawang bit ay may isa lamang na 1, magtatakbo ang bawat bit na 1.
~ NOT Inilibing ang lahat ng bit
<< Pagsasalba ng zero sa pag-iikot sa kaliwa Sa pamamagitan ng pag-iikot mula sa kanan at pagpunta sa kaliwa ng zero at pag-aalis ng pinakamalapit na bit.
>> Makasigla sa pag-iikot sa kanan Sa pamamagitan ng pag-iikot mula sa kaliwa at pagpunta sa kanan sa kopya ng pinakamalapit na bit at pag-aalis ng pinakamalapit na bit.
>>> Pagsasalba ng zero sa pag-iikot sa kanan Sa pamamagitan ng pag-iikot mula sa kaliwa at pag-aalis ng pinakamalapit na bit, ang pag-iikot sa kanan sa pamamagitan ng pagpunta sa kanan at pag-aalis ng pinakamalapit na bit.

实例

操作 结果 等同于 结果
5 & 1 1 0101 & 0001 0001
5 | 1 5 0101 | 0001 0101
5 ^ 1 4 0101 ^ 0001 0100
~ 5 10 ~0101 1010
5 << 1 10 0101 << 1 1010
5 >> 1 2 0101 >> 1 0010
5 >>> 1 2 0101 >>> 1 0010

JavaScript 使用 32 位按位运算数

JavaScript 将数字存储为 64 位浮点数,但所有按位运算都以 32 位二进制数执行。

在执行位运算之前,JavaScript 将数字转换为 32 位有符号整数。

执行按位操作后,结果将转换回 64 位 JavaScript 数。

上面的例子使用 4 位无符号二进制数。所以 ~ 5 返回 10。

由于 JavaScript 使用 32 位有符号整数,JavaScript 将返回 -6。

00000000000000000000000000000101 (5)

11111111111111111111111111111010 (~5 = -6)

有符号整数使用最左边的位作为减号。

位运算 AND

当对一对数位执行位运算 AND 时,如果数位均为 1 则返回 1。

单位示例:

运算 结果
0 & 0 0
0 & 1 0
1 & 0 0
1 & 1 1

四位示例:

运算 结果
1111 & 0000 0000
1111 & 0001 0001
1111 & 0010 0010
1111 & 0100 0100

位运算 OR

当对一对数位执行位运算 OR 时,如果其中一位是 1 则返回 1:

单位示例

运算 结果
0 | 0 0
0 | 1 1
1 | 0 1
1 | 1 1

四位运算:

操作 结果
1111 | 0000 1111
1111 | 0001 1111
1111 | 0010 1111
1111 | 0100 1111

位运算 XOR

当对一对数位进行位运算 XOR 时,如果数位是不同的则返回 1:

单位示例:

运算 结果
0 ^ 0 0
0 ^ 1 1
1 ^ 0 1
1 ^ 1 0

四位示例:

运算 结果
1111 ^ 0000 1111
1111 ^ 0001 1110
1111 ^ 0010 1101
1111 ^ 0100 1011

JavaScript 位运算 AND (&)

如果位数都是 1,则位运算 AND 返回 1:

Dekadesimal Binares
5 00000000000000000000000000000101
1 00000000000000000000000000000001
5 & 1 00000000000000000000000000000001 (1)

实例

var x = 5 & 1;

亲自试一试

JavaScript 位运算 OR (|)

Kung isa sa mga bit ay 1, ang bit operation OR ay ibibigay 1:

Dekadesimal Binares
5 00000000000000000000000000000101
1 00000000000000000000000000000001
5 | 1 00000000000000000000000000000101 (5)

实例

var x = 5 | 1;

亲自试一试

JavaScript bit operation XOR (^)

Kung ang mga bit ay iba, ang XOR ay ibibigay 1:

Dekadesimal Binares
5 00000000000000000000000000000101
1 00000000000000000000000000000001
5 ^ 1 00000000000000000000000000000100 (4)

实例

var x = 5 ^ 1;

亲自试一试

JavaScript bit operation NOT (~)

Dekadesimal Binares
5 00000000000000000000000000000101
~5 11111111111111111111111111111010 (-6)

实例

var x = ~5;

亲自试一试

JavaScript (kanan palamuti) bit operation ililipat (<<)

Ito ay ililipat na kanan palamuti. Ang isang o ilang nulang bit ay inililipat mula sa kanan, ang pinakamalapit na bit ay inalis:

Dekadesimal Binares
5 00000000000000000000000000000101
5 << 1 00000000000000000000000000001010 (10)

实例

var x = 5 << 1;

亲自试一试

JavaScript (may simbolo) bit operation ililipat (>>)

Ito ay ililipat na pinapangalagaan ang simbolo. Ang pinakamalapit na bit ay inililipat mula sa kaliwa, ang pinakamalapit na bit ay inililipat palabas:

Dekadesimal Binares
-5 11111111111111111111111111111011
-5 >> 1 11111111111111111111111111111101 (-3)

实例

var x = -5 >> 1;

亲自试一试

JavaScript (kanan palamuti) ililipat (>>>)

Ito ay kanan palamuti na ililipat. Ang isang o ilang nulang bit ay inililipat mula sa kaliwa, ang pinakamalapit na bit ay inililipat palabas:

Dekadesimal Binares
5 00000000000000000000000000000101
5 >>> 1 00000000000000000000000000000010 (2)

实例

var x = 5 >>> 1;

亲自试一试

32-bit may simbol na integer (binares na bilang)

Itong isang bit na 32-bit integer ay mahusay na maunawaan:

二进制表示 十进制值
00000000000000000000000000000001 1
00000000000000000000000000000010 2
00000000000000000000000000000100 4
00000000000000000000000000001000 8
00000000000000000000000000010000 16
00000000000000000000000000100000 32
00000000000000000000000001000000 64

多设置一些数位揭示了二进制的模式:

二进制表示 十进制值
00000000000000000000000000000101 5 (4 + 1)
00000000000000000000000000101000 40 (32 + 8)
00000000000000000000000000101101 45 (32 + 8 + 4 + 1)

负数是正数的二进制补码加 1:

二进制表示 十进制值
00000000000000000000000000000101 5
11111111111111111111111111111011 -5
00000000000000000000000000101000 40
11111111111111111111111111011000 -40
11111111111111111111111111011001 -41

把十进制转换为二进制

实例

function dec2bin(dec){
    return (dec >>> 0).toString(2);
}

亲自试一试

把二进制转换为十进制

实例

function bin2dec(bin){
    return parseInt(bin, 2).toString(10);
}

亲自试一试