Unsigned return type returns signed number C
Unsigned return type returns signed number C
我目前正在学习 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
如果函数的 return 类型不是无符号的,我可以看出 -4 的来源,但是因为 return 类型是无符号的,这不应该是 return 一个无符号数?为什么是 returning -4?
谢谢!
即使函数声明它是 returning unsigned
,return 之后的值的实际使用决定了它的解释方式。
例如,printf("%d", x);
将 x
解释为 signed int
,即使它被声明为其他任何东西。
我目前正在学习 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
如果函数的 return 类型不是无符号的,我可以看出 -4 的来源,但是因为 return 类型是无符号的,这不应该是 return 一个无符号数?为什么是 returning -4?
谢谢!
即使函数声明它是 returning unsigned
,return 之后的值的实际使用决定了它的解释方式。
例如,printf("%d", x);
将 x
解释为 signed int
,即使它被声明为其他任何东西。