整数正或负检查
integer positive or negative check
我有兴趣知道答案的一个小问题。如果我有一个整数,我想知道它是负数还是正数,我会这样做:
if (n > 0)
else
但我也可以使用像这样的位运算符:
if (n >> (sizeof(int) * 8 - 1) == 0)
else
是否存在性能差异?请注意,我不了解ASM,所以查看拆解对我没有真正的帮助,所以我只想找到一个是/否的答案。
有性能差异吗。。。所以我只想找一个是/否的答案
一个简单的是/否答案是:"no,不要这么做。"编译器会为您处理这些微优化。它将最肯定地编程为尽可能有效地实现n > 0
。
如果有什么不同的话,你可以成功地通过比特移位破解将其混淆,并使其产生次优的结果,但我真诚地对此表示怀疑。写出你的意思,并将微观优化部分留给编写优化器的专业人员。
答案是它完全依赖于编译器。
一般来说,您需要接受这样一个事实,即直观地了解C代码的性能是非常容易出错的,因为编译器很聪明,可以做一些令人惊讶的事情。
如果你关心某个东西在给定环境中的性能,你需要衡量它。
ARM的CPSR寄存器允许对有符号和无符号操作进行大于和小于的检查比较。这意味着你的第二个版本可能会比第一个版本慢(当单词大小改变时,可靠性也会降低)。(请参见此处)。我无法想象英特尔会有什么不同。
相关文章:
- 检查输入是否不是整数或数字
- 检查TCHAR数组输入是否为带符号整数C++
- 检查字符串是否为整数
- 从双精度转换为整数的显式类型是否始终检查整数溢出?
- 检查整数是否增加了C++
- 如何检查整数是否包含数字 0 和 1
- 如何检查整数是否发生过或在读取C 的输入文件时发生了字符
- 检查整数是否是 8 的倍数
- 为什么 C 和 C++ 没有内置方法来检查整数溢出?
- 从整数列表中交叉检查整数运行时错误
- 检查整数是否具有整数立方根
- C++正在检查整数
- 如何在C++中检查整数单链表的对称性
- 函数检查整数类型是否适合可能不同(整数)类型的值
- 用于检查整数是否包含给定十六进制模式的c++代码
- 有效地检查整数的奇偶性
- Cin读取数字并检查整数
- 什么时候需要检查整数溢出
- 在qt中NULL检查整数
- 错误检查 整数除以零