我目前正在浏览K& R C,我通过此示例进入了按位运算符部分:
unsigned getbits(unsigned x, int p, int n) {
return (x >> (p + 1 - n)) & ~(~0 << n);
}
我一直在玩它,我做了以下事情:
unsigned getbits(unsigned x, int p, int n) {
return (~0 << n);
}
我喂了n = 2
,我得到的结果是-4
。如果我没有弄错的话,位形式的结果应该是这个(对于32位整数):
1111 1111 1111 1100
如果函数的返回类型不是无符号的,我可以看到-4来自哪里,但由于返回类型是无符号的,不应该返回无符号数?为什么回归-4?
谢谢!
答案 0 :(得分:3)
即使函数声明它返回unsigned
,返回后实际使用的值也决定了它的解释方式。
例如,printf("%d", x);
将x
解释为signed int
,即使它被声明为其他内容。