I recently noticed a (weird) behavior when I conducted operations using shift >> <<!
To explain it, let me write this small runnable code that does two operations which are supposed to be identical(In my understanding), but I'm surprised with different results!
#include <stdio.h>
int main(void) {
    unsigned char a=0x05, b=0x05;
    // first operation
    a = ((a<<7)>>7);
    // second operation
    b <<= 7;
    b >>= 7;
    printf("a=%X b=%X\n", a, b);
    return 0;
} 
When ran, a = 5 and b = 1. I expect them both to be equal to 1! Can someone kindly explain why I got such a result?
P.S: In my environment the size of unsigned char is 1 byte
 
     
     
     
     
    