整数正或负检查

integer positive or negative check

本文关键字:检查 整数      更新时间:2023-10-16

我有兴趣知道答案的一个小问题。如果我有一个整数,我想知道它是负数还是正数,我会这样做:

if (n > 0)
else

但我也可以使用像这样的位运算符:

if (n >> (sizeof(int) * 8 - 1) == 0)
else

是否存在性能差异?请注意,我不了解ASM,所以查看拆解对我没有真正的帮助,所以我只想找到一个是/否的答案。

有性能差异吗。。。所以我只想找一个是/否的答案

一个简单的是/否答案是:"no,不要这么做。"编译器会为您处理这些微优化。它将最肯定地编程为尽可能有效地实现n > 0

如果有什么不同的话,你可以成功地通过比特移位破解将其混淆,并使其产生次优的结果,但我真诚地对此表示怀疑。写出你的意思,并将微观优化部分留给编写优化器的专业人员。

答案是它完全依赖于编译器。

一般来说,您需要接受这样一个事实,即直观地了解C代码的性能是非常容易出错的,因为编译器很聪明,可以做一些令人惊讶的事情。

如果你关心某个东西在给定环境中的性能,你需要衡量它。

ARM的CPSR寄存器允许对有符号和无符号操作进行大于和小于的检查比较。这意味着你的第二个版本可能会比第一个版本慢(当单词大小改变时,可靠性也会降低)。(请参见此处)。我无法想象英特尔会有什么不同。