Kri*_*son 2 c 32-bit bit-manipulation
我正在尝试编写一个C函数来检查a int
是否为正.这就是我所拥有的:
int isPositive(int x){
return ~(x >> 31) & 0x1;
}
Run Code Online (Sandbox Code Playgroud)
根据数字,这应该返回1是正数而0不是.它适用于所有数字,但不适用于 -2147483648
.
该数字应该适合具有2的补码的32位向量.那为什么不工作呢?
确切地说,我在Visual Studio中,它给了我一个编译错误,C4146: unary minus operator applied to unsigned type, result still unsigned
但-2147483647似乎工作.
你是怎么进入的-2147483648
?如果你只是输入,直接到你的程序,这将是一元-
适用于文字,不是文字,包括中-
.由于2147483648不适合int
,因此您的文字会获得unsigned
类型.
使用INT_MIN
或使用大多数库用来定义它的技巧:
isPositive(-2147483647 - 1);
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
867 次 |
最近记录: |