当前位置:  开发笔记 > 编程语言 > 正文

负整数的C++优化

如何解决《负整数的C++优化》经验,为你挑选了3个好方法。

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

是否有更快的-a实现?

我必须对此进行一些按位操作吗?



1> paxdiablo..:

几乎可以肯定没有什么比机器代码NEG指令更快,你的编译器很可能会把它变成.

如果有的话,我确信编译器会使用它.

对于二进制补码数,你不能加1,但这几乎肯定会慢一点.但我并不完全确定C/C++标准要求使用二进制补码(他们可能,我没有检查).

我认为这个问题属于那些试图重写strcpy()等人以获得更快速度的问题.那些人天真地认为C库strcpy()尚未通过使用特殊的机器代码指令进行大量优化(而不是大多数人第一次尝试的简单循环).

您是否进行过性能测试,这些测试似乎表明您的否定需要花费相当长的时间?

<含蓄幽默,或 - 什么 - 我的妻子通话,无趣>

486上的NEG(最后一次我不得不担心时钟周期的现状)需要3个时钟周期(存储器版本,寄存器只需1个) - 我假设后面的芯片将是相似的.在3Ghz CPU上,这意味着您每秒可以完成10亿次这样的操作.这不够快吗?



2> Ken White..:

你有没有听过"过早优化"这个短语?如果你已经优化了所有代码,这是唯一剩下的,很好.如果没有,你就是在浪费时间.



3> rlbond..:

澄清Pax的陈述,

除1例外,C++编译器不强制使用二进制补码.将有符号类型转换为无符号类型时,如果数字为负数,则转换结果必须是整数的2的补码表示.

简而言之,没有比-a更快的方法; 即使有,它也不会便携.请记住,过早优化是邪恶的.首先描述您的代码,然后解决瓶颈问题.

参见The C++ Programming Language,3rd Ed.,C.6.2.1节.

推荐阅读
雯颜哥_135
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有