How bit shifts work
A left shift moves all bits to a higher position.
A right shift moves all bits to a lower position.
A left shift of one position multiplies the value by 2. A right shift of one position divides it by 2.
Try it
The result of 1 shifted left by 4 positions. Select a bit to change it. Change the bit width or the signed mode to see the effect.
Name or expression
ID0
ASCII
·
Binary
0b
0b00010000
Hex
0x
0x10
Decimal
16
Shift
Name or expression
ID0
Binary
0b
Hex
0x
Decimal
ASCII
·
Shift
Sign
Bits
Endian
7
6
5
4
3
2
1
0
Worked example
Shift the value 1 left by four positions:
- Write the value: 00000001.
- Move every bit four positions to the left.
- Fill the empty low positions with 0.
- The result is 00010000, which is 16.
Where this is used
A shift builds a mask for a single bit. The expression 1 << 5 gives the mask for bit 5.
A shift is faster than a multiplication on a small processor.
A driver combines a shift and a mask to place a field at the correct bit position.
Points to note
- A bit that moves past the bit width goes out of the register. The bit does not return on a shift back.
- A right shift of a signed value is not the same in every language. Some languages keep the top bit, others fill with 0.
- A shift by a number of positions equal to or larger than the bit width gives undefined behaviour in C.
The full tool
The full editor holds many values at the same time. It also evaluates expressions across them, and it reads live values from a serial port.
Open the full editorQuestions
- Is a left shift the same as a multiplication by two?
- Yes, until a bit moves past the bit width. The result is then incorrect, because the register drops the high bit.
- What is an arithmetic shift?
- An arithmetic right shift copies the top bit into the new high positions. This keeps the sign of a negative value.
- Why do drivers use 1 << n?
- The expression gives a value with only bit n set. This is the mask for that bit.