bugl
bugl
HomeLearnPatternsPathsSearch
HomeLearnPatternsPathsSearch

Loading lesson path

Learn/JavaScript/Working with Data
JavaScript•Working with Data

JavaScript Bitwise Operations

Flash cards

Review the key moves

1/4
Core idea

What is the main idea behind JavaScript Bitwise Operations?

Lesson checks

Practice each idea before moving on

Short Mimo-style checks built from this lesson's code, terms, and sequence.

1Quick choice

Which statement best captures the main point of this lesson?

2Fill blank

Complete the missing token from the example code.

___ x = 5 & 1;
3Order

Put the learning moves in the order that makes the concept easiest to apply.

JavaScript Bitwise AND
JavaScript Uses 32 bits Bitwise Operands
JavaScript Bitwise Operators

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

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.

JavaScript Bitwise AND

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

OperationResult
0 & 00
0 & 10
1 & 00
1 & 11
OperationResult
1111 & 00000000
1111 & 00010001
1111 & 00100010
1111 & 01000100

JavaScript Bitwise OR

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

OperationResult
000
011
101
111
OperationResult
111100001111
111100011111
111100101111
111101001111

JavaScript Bitwise XOR

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

OperationResult
0 ^ 00
0 ^ 11
1 ^ 01
1 ^ 10
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

let x = 5 & 1;

JavaScript Bitwise OR (|)

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

DecimalBinary
500000000000000000000000000000101
100000000000000000000000000000001
5100000000000000000000000000000101 (5)

Example

let x = 5 | 1;

JavaScript Bitwise XOR (^)

Bitwise XOR returns 1 if the bits are different:

DecimalBinary
500000000000000000000000000000101
100000000000000000000000000000001
5 ^ 100000000000000000000000000000100 (4)

Example

let x = 5 ^ 1;

JavaScript Bitwise NOT (~)

DecimalBinary
500000000000000000000000000000101
~511111111111111111111111111111010 (-6)

Example

let x = ~5;

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

let x = 5 << 1;

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

let x = -5 >> 1;

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

let x = 5 >>> 1;

Shift Assignment Operators

OperatorExampleSame As
<<=x <<= yx = x << y
>>=x >>= yx = x >> y
>>>=x >>>= yx = x >>> y

The <<= Operator

The Left Shift Assignment Operator left shifts a variable.

Left Shift Assignment Example

let x = -100;
x <<= 5;

The >>= Operator

The Right Shift Assignment Operator right shifts a variable (signed).

Right Shift Assignment Example

let x = -100;
x >>= 5;

The >>>= Operator

The Unsigned Right Shift Assignment Operator right shifts a variable (unsigned).

Unsigned Right Shift Assignment Example

let x = -100;
x >>>= 5;

Bitwise Assignment Operators

OperatorExampleSame As
&=x &= yx = x & y
^=x ^= yx = x ^ y
=x= yx = xy

The &= Operator

The Bitwise AND Assignment Operator does a bitwise AND operation on two operands and assigns the result to the the variable.

Bitwise AND Assignment Example

let x = 10;
x &= 5;

The |= Operator

The Bitwise OR Assignment Operator does a bitwise OR operation on two operands and assigns the result to the variable.

Bitwise OR Assignment Example

let x = 10;
x |= 5;

The ^= Operator

The Bitwise XOR Assignment Operator does a bitwise XOR operation on two operands and assigns the result to the variable.

Bitwise XOR Assignment Example

let x = 10;
x ^= 5;

Binary Numbers

Binary numbers with only one bit set are 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

Joke

There are only 10 types of people in the world: those who understand binary and those who don't.

Converting Decimal to Binary

Example

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

Converting Binary to Decimal

Example

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

Previous

JavaScript String Search

Next

JavaScript Set Date Methods