c - 无符号返回类型返回有符号数 C

标签 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?

谢谢!

最佳答案

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

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

关于c - 无符号返回类型返回有符号数 C,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34442959/

相关文章:

c - 从所有数组元素打印字符串

c# - 按位检查和相等检查哪个更有效?

javascript - 在 JavaScript 中移位时 16 位值变为负数

algorithm - 二叉树 : Getting the path of an element from its signature

java - 位移位操作 java - 输出到 8 位而不是 9 位

c - 在 C 中使用 Fortran 代码

c - C语言中如何识别包含字符的整数数组?

c - time.h clock() 在 OS X 上坏了吗?

algorithm - 压缩具有特定顺序的正整数向量 (int32)

java - 在不使用条件代码的情况下确定数字是奇数还是偶数