无符号返回类型返回带符号的数字C.

时间:2015-12-23 20:07:28

标签: c bit-manipulation bitwise-operators

我目前正在浏览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?

谢谢!

1 个答案:

答案 0 :(得分:3)

即使函数声明它返回unsigned,返回后实际使用的值也决定了它的解释方式。

例如,printf("%d", x);x解释为signed int,即使它被声明为其他内容。