我有一段非常简单的代码,在其中使用逻辑移位时,对于 ~0 的值会以奇怪的方式工作。
据我所知,这与有符号/无符号数据类型有关。
#include <stdio.h>
void printfbits(int x) {
for (int i=7; i>=0;i--) {
printf("%d", x>>i & 1);
}
printf("\n");
}
int main() {
printfbits(~0>>1);
}
我期望的是0111111,而不是1111111。 我也尝试过了,但没有成功。
printfbits(((unsigned int)~0)>>1);
int
并不一定是32位!它们可以是任何大于16位的大小。现在常见的大小为16、32和64位。 - marcelm