我正在尝试编写一个 C 函数来检查 aint
是否为正。这就是我所拥有的:
int isPositive(int x){
return ~(x >> 31) & 0x1;
}
根据数字,这应该返回 1 是正数,而 0 不是。它适用于所有数字,但不适用于 -2147483648
.
该数字应该适合带有 2 补码的 32 位向量。那么为什么它不起作用呢?
准确地说,我在 Visual Studio 中,它给了我一个编译错误,C4146: unary minus operator applied to unsigned type, result still unsigned
但是 -2147483647 似乎有效。