Bitwise
Shift Values
Left and right shifts move bits to multiply or divide unsigned values by powers of two.
left shift
`value << n` moves bits left and multiplies by `2^n` for these small unsigned values.
right shift
`value >> n` moves bits right and divides by `2^n` for these small unsigned values.
Shift Values
shift_values.c
Replay: real traced execution (multi-file project)
#include <stdio.h>
int main(void) {
unsigned int value = 3;
unsigned int doubled = value << 1;
unsigned int halved = doubled >> 1;
printf("doubled=%u halved=%u\n", doubled, halved);
return 0;
}
#include <stdio.h>
int main(void) {
unsigned int value = 5;
unsigned int doubled = value << 1;
unsigned int halved = doubled >> 1;
printf("doubled=%u halved=%u\n", doubled, halved);
return 0;
}
#include <stdio.h>
int main(void) {
unsigned int value = 8;
unsigned int doubled = value << 1;
unsigned int halved = doubled >> 1;
printf("doubled=%u halved=%u\n", doubled, halved);
return 0;
}
value ← 3, doubled ← 6, halved ← 3
3int main(void) {4 unsigned int value→ 3 = 3; //@value=5, 85 unsigned int doubled→ 6 = value3 << 1;6 unsigned int halved→ 3 = doubled6 >> 1;78 printf("doubled=%u halved=%u\n", doubled6, halved3);9 return 0;10}outputdoubled=6 halved=3
value ← 5, doubled ← 10, halved ← 5
3int main(void) {4 unsigned int value→ 5 = 5;5 unsigned int doubled→ 10 = value5 << 1;6 unsigned int halved→ 5 = doubled10 >> 1;78 printf("doubled=%u halved=%u\n", doubled10, halved5);9 return 0;10}outputdoubled=10 halved=5
value ← 8, doubled ← 16, halved ← 8
3int main(void) {4 unsigned int value→ 8 = 8;5 unsigned int doubled→ 16 = value8 << 1;6 unsigned int halved→ 8 = doubled16 >> 1;78 printf("doubled=%u halved=%u\n", doubled16, halved8);9 return 0;10}outputdoubled=16 halved=8