使用unsigned
表示第一个len
位的掩码,我写了一个函数如下:
void left_shift(int len) {
unsigned x = ~0u << (32 - len);
printf("%08x\n", x);
}
然而,当我致电left_shift(0)
时,控制台会打印ffffffff
,而不是{预期的00000000
。
所以,我做了另一个函数来测试我是否误解了位移操作,如下所示:
void left_shift() {
unsigned x = ~0u << (32 - 0);
printf("%08x\n", x);
}
这一次,它打印出预期的00000000
。
总结:
int main() {
left_shift(); // prints "00000000"
left_shift(0); // prints "ffffffff"
return 0;
}
我真的很困惑。谁能帮忙解释一下?