刚才做移位运算练习发现一个神奇的事。。。
这段代码输出的结果是一个负数,符合有符号数的算术右移,但如果把代码稍微改动成
#include <stdio.h>
int main() {
int x = 0x80000000;
x = (x & 0xffffffff);
x = x >> 1;
printf("%d", x);
return 0;
}
这段代码输出的结果是一个负数,符合有符号数的算术右移,但如果把代码稍微改动成
#include <stdio.h>
int main() {
int x = 0x80000000;
x = (x & 0xffffffff) >> 1;
printf("%d", x);
return 0;
}
输出的结果就成了一个整数,是无符号数逻辑右移的结果。
猜测&运算的返回值为一unsigned int值。。。