可以说,我们有一个负整数说 int;

有没有更快的执行情况 -一个?

做我必须做一些位操作这个吗?

有帮助吗?

解决方案

要澄清大同的说法,

C ++编译器不授权使用二的补码,除1例。当转换有符号类型为无符号类型,如果数是负的,转换的结果必须是整数的2的补码表示。

总之,有不大于-a更快的方法;即使有,也不会是便携。 请记住,以及过早的优化是邪恶的。首先分析代码,然后在瓶颈工作。

请参阅的C ++编程语言,第3版,部分C.6.2.1。

其他提示

还有几乎可以肯定没有什么速度快于机代码中国家专家组的指示,编译器将最有可能把这种进入。

如果有的话,我肯定编译器会使用它。

一二-补充数量,你不能这及添加1但是几乎肯定会更慢。但是我不能完全确定这C/C++标准的任务使用的二进制补码(他们可能,我没有检查).

我认为这个问题属于与那些试图重写 strcpy() et al获得更多的速度。这些人天真地承担这C库 strcpy() 已经不是高度优化使用特殊的机代码的说明(而不是一个简单的循环,这将是大多数人的第一次尝试).

你有没有运行性能测试,这似乎表明,你的否定,是把过长时间?

<subtle-humor-or-what-my-wife-calls-unfunny>

    一个NEG在486(技术状态的最后一次我不得不担心 关于时钟周期)需要3时钟周期(存储器版本, 只需要1)-我假设后芯片 类似。在3Ghz CPU,这意味着你能做的1亿 这些每一秒。是不够快吗?

</subtle-humor-or-what-my-wife-calls-unfunny>

你有没有听过这句话“过早优化”?如果你已经优化的所有的代码中,这是唯一剩下的东西,罚款。如果没有,你是在浪费时间。

否定的数是在CPU硬件方面非常简单的操作。我不知道这需要不再做否定,而不是做任何位运算的处理器 - 包括一些30岁处理器

只是好奇,是什么促使你问这个问题?这当然不是因为你发现的瓶颈。

也许你应该考虑优化算法更因此比这样的小事情。如果这是优化的最后一件事,你的代码是一样快,因为它会得到。

所有好的答案。

如果(-a)有差别,你已经做了一些积极的真正性能优化。

性能调整程序是象得到水出湿海绵的。作为一个程序首先被写入,这是很湿。随着一点点努力,你可以拧一段时间出来。随着越来越多的努力,你可以干出来一些。

如果你真的很执着,你可以得到它下来,你必须把它放在烈日下获得的时间的最后几个分子出来的。

这是在该(-a)可能有所作为水平。

您看到与否定号的性能问题?我有一个很难想,大多数编译器会做对整数按位运算否定他们。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top