我目前正在学习 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?
谢谢!
最佳答案
即使函数声明它返回无符号
,返回后值的实际使用也决定了它的解释方式。
例如,printf("%d", x);
将 x
解释为 signed int
,即使它被声明为任何内容否则。
关于c - 无符号返回类型返回有符号数 C,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34442959/