我最近在使用 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!有人可以解释为什么我得到这样的结果吗?
PS:在我的环境中,大小unsigned char
为 1 字节