Недавно я заметил (странное) поведение, когда я проводил операции с использованием shift >>
<<
!
Чтобы объяснить это, позвольте мне написать этот маленький исполняемый код, который выполняет две операции, которые должны быть идентичными (в моем понимании), но меня удивляют разные результаты!
#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;
}
При запуске a = 5
и b = 1
. Я ожидаю, что они оба будут равны 1! Может кто-нибудь объяснить, почему я получил такой результат?
P.S: В моей среде размер unsigned char
равен 1 байт