JavaScript Bitwise Operations

By | August 26, 2022

JavaScript Bitwise Operators

OperatorNameDescription
&ANDSets each bit to 1 if both bits are 1
|ORSets each bit to 1 if one of two bits is 1
^XORSets each bit to 1 if only one of two bits is 1
~NOTInverts all the bits
<<Zero fill left shiftShifts left by pushing zeros in from the right and let the leftmost bits fall off
>>Signed right shiftShifts right by pushing copies of the leftmost bit in from the left, and let the rightmost bits fall off
>>>Zero fill right shiftShifts right by pushing zeros in from the left, and let the rightmost bits fall off

Examples

OperationResultSame asResult
5 & 110101 & 0001 0001
5 | 150101 | 0001 0101
~ 510 ~0101 1010
5 << 1100101 << 1 1010
5 ^ 140101 ^ 0001 0100
5 >> 120101 >> 1 0010
5 >>> 120101 >>> 1 0010

JavaScript Uses 32 bits Bitwise Operands

JavaScript stores numbers as 64 bits floating point numbers, but all bitwise operations are performed on 32 bits binary numbers.

Before a bitwise operation is performed, JavaScript converts numbers to 32 bits signed integers.

After the bitwise operation is performed, the result is converted back to 64 bits JavaScript numbers.

The examples above uses 4 bits unsigned binary numbers. Because of this ~ 5 returns 10.

Since JavaScript uses 32 bits signed integers, it will not return 10. It will return -6.

00000000000000000000000000000101 (5)

11111111111111111111111111111010 (~5 = -6)

A signed integer uses the leftmost bit as the minus sign.

Bitwise AND

When a bitwise AND is performed on a pair of bits, it returns 1 if both bits are 1.One bit example:

OperationResult
0 & 00
0 & 10
1 & 00
1 & 11

4 bits example:

OperationResult
1111 & 00000000
1111 & 00010001
1111 & 00100010
1111 & 01000100

Bitwise OR

When a bitwise OR is performed on a pair of bits, it returns 1 if one of the bits are 1:One bit example:

OperationResult
0 | 00
0 | 1
1 | 01
1 | 11

4 bits example:

OperationResult
1111 | 00001111
1111 | 00011111
1111 | 00101111
1111 | 01001111

Bitwise XOR

When a bitwise XOR is performed on a pair of bits, it returns 1 if the bits are different:One bit example:

OperationResult
0 ^ 00
0 ^ 1
1 ^ 01
1 ^ 1

4 bits example:

OperationResult
1111 ^ 00001111
1111 ^ 00011110
1111 ^ 00101101
1111 ^ 01001011

JavaScript Bitwise AND (&)

Bitwise AND returns 1 only if both bits are 1:

DecimalBinary
500000000000000000000000000000101
100000000000000000000000000000001
5 & 100000000000000000000000000000001 (1)

Example

<!DOCTYPE html>
<html>
<body>
<h2>JavaScript Bitwise AND</h2>
<p id="demo">My First Paragraph.</p>
<script>
document.getElementById("demo").innerHTML = 5 & 1;
</script>
</body>
</html> 

Result:

JavaScript Bitwise AND

1

JavaScript Bitwise OR (|)

Bitwise OR returns 1 if one of the bits are 1:

DecimalBinary
500000000000000000000000000000101
100000000000000000000000000000001
5 | 100000000000000000000000000000101 (5)

Example

<!DOCTYPE html>
<html>
<body>
<h2>JavaScript Bitwise OR</h2>
<p id="demo"></p>
<script>
document.getElementById("demo").innerHTML = 5 | 1;
</script>
</body>
</html>

Result:

JavaScript Bitwise OR

5

JavaScript Bitwise XOR (^)

Bitwise XOR returns 1 if the bits are different:

DecimalBinary
500000000000000000000000000000101
100000000000000000000000000000001
5 ^ 100000000000000000000000000000100 (4)

Example

<!DOCTYPE html>
<html>
<body>
<h2>JavaScript Bitwise XOR</h2>​
<p id="demo"></p>
<script>
document.getElementById("demo").innerHTML = 5 ^ 1;
</script>
</body>
</html>

Result:

JavaScript Bitwise XOR

4

JavaScript Bitwise NOT (~)

DecimalBinary
500000000000000000000000000000101
~511111111111111111111111111111010 (-6)

Example

<!DOCTYPE html>
<html>
<body>
<h2>JavaScript Bitwise NOT</h2>
<p id="demo"></p>
<script>
document.getElementById("demo").innerHTML = ~ 5;
</script>
</body>
</html>

Result:

JavaScript Bitwise NOT

-6

JavaScript (Zero Fill) Bitwise Left Shift (<<)

This is a zero fill left shift. One or more zero bits are pushed in from the right, and the leftmost bits fall off:

DecimalBinary
500000000000000000000000000000101
5 << 100000000000000000000000000001010 (10)

Example

<!DOCTYPE html>
<html>
<body>
<h2>JavaScript Bitwise Left</h2>
<p id="demo"></p>​
<script>
document.getElementById("demo").innerHTML = 5 << 1;
</script>
</body>
</html>

Result:

JavaScript Bitwise Left

10

JavaScript (Sign Preserving) Bitwise Right Shift (>>)

This is a sign preserving right shift. Copies of the leftmost bit are pushed in from the left, and the rightmost bits fall off:

DecimalBinary
-511111111111111111111111111111011
-5 >> 111111111111111111111111111111101 (-3)

Example

<!DOCTYPE html>
<html>
<body>
<h2>JavaScript Sign Preserving Bitwise Right.</h2>
<p id="demo"></p>
<script>
document.getElementById("demo").innerHTML = -5 >> 1;
</script>
</body>
</html>

Result:

JavaScript Sign Preserving Bitwise Right.

-3

JavaScript (Zero Fill) Right Shift (>>>)

This is a zero fill right shift. One or more zero bits are pushed in from the left, and the rightmost bits fall off:

DecimalBinary
500000000000000000000000000000101
5 >>> 100000000000000000000000000000010 (2)

Example

<!DOCTYPE html>
<html>
<body>
<h2>JavaScript Bitwise Right</h2>
<p id="demo"></p>
<script>
document.getElementById("demo").innerHTML = 5 >>> 1;
</script>
</body>
</html>

Result:

JavaScript Bitwise Right

2

Binary Numbers

Binary numbers with only one bit set is easy to understand:

Binary RepresentationDecimal value
000000000000000000000000000000011
000000000000000000000000000000102
000000000000000000000000000001004
000000000000000000000000000010008
0000000000000000000000000001000016
0000000000000000000000000010000032
0000000000000000000000000100000064

Setting a few more bits reveals the binary pattern:

Binary RepresentationDecimal value
000000000000000000000000000001015 (4 + 1)
0000000000000000000000000000110113 (8 + 4 + 1)
0000000000000000000000000010110145 (32 + 8 + 4 + 1)

JavaScript binary numbers are stored in two’s complement format.

This means that a negative number is the bitwise NOT of the number plus 1:

Binary RepresentationDecimal value
000000000000000000000000000001015
11111111111111111111111111111011-5
000000000000000000000000000001106
11111111111111111111111111111010-6
0000000000000000000000000010100040
11111111111111111111111111011000-40

Converting Decimal to Binary

Example

<!DOCTYPE html>
<html>
<body>
<h2>JavaScript Convert Decimal to Binary</h2>
<p id="demo"></p>
<script>
document.getElementById("demo").innerHTML = dec2bin(-5);
function dec2bin(dec){
  return (dec >>> 0).toString(2);
}
</script>
</body>
</html>

Result:

JavaScript Convert Decimal to Binary

11111111111111111111111111111011

Converting Binary to Decimal

Example

<!DOCTYPE html>
<html>
<body>
<h2>JavaScript Convert Binary to Decimal</h2>
<p id="demo"></p>
<script>
document.getElementById("demo").innerHTML = bin2dec(101);
function bin2dec(bin){
  return parseInt(bin, 2).toString(10);
}
</script>
</body>
</html>​

Result:

JavaScript Convert Binary to Decimal

5

Leave a Reply

Your email address will not be published. Required fields are marked *