整数正或负检查

时间:2014-10-15 12:27:29

标签: c++ integer

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

if (n > 0)
else

但我也可以像以下那样使用逐位运算符:

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

有性能差异吗? 请注意,我不知道ASM所以查看反汇编对我来说并不是真的有帮助,所以我只是在寻找一个是/否答案。

3 个答案:

答案 0 :(得分:3)

  

有性能差异吗? ......所以我只是在寻找是/否答案

简单的是/否答案是:" ,只是不做。"您的编译器将为您处理此类微优化。 绝对将被编程为尽可能有效地实现n > 0

如果有的话,你会成功地将它与位移黑客混淆并使它产生一些不理想的东西,但我真诚地怀疑这一点。写下你的意思,并将微优化位留给编写优化器的专业人员。

答案 1 :(得分:1)

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

一般来说,你需要接受关于C代码性能的直觉是非常容易出错的,因为编译器是聪明的并且做出令人惊讶的事情。

如果您关心某个环境中某些事物的表现,则需要对其进行测量。

答案 2 :(得分:0)

ARM的CPSR寄存器允许对有符号和无符号操作进行大于和小于的检查比较。这意味着您的第二个版本可能比第一个版本更慢(并且在字大小改变时更不可靠)。 (见here)。我无法想象英特尔会有什么不同。