优化减法

时间:2014-02-20 23:59:09

标签: c optimization

我正在用C编写一个程序(优化很重要),它使用unsigned char,我必须从255中抽取这些char,即如果我有一个unsigned char x,我必须计算255-x。由于这只是反转8位,有没有办法告诉编译器这样可以更快地完成?或者CPU是否已经知道并且只是反转位,所以255-x是最快的方式?

4 个答案:

答案 0 :(得分:2)

虽然正如评论所说,这应该不会更快,但有一点反转运算符,~

unsigned char c = ...;
c = ~c;

答案 1 :(得分:1)

如果存在任何性能差异,那将是由于情有可原的情况,例如涉及表达式评估的C的细微差别,而不是由于现代处理器上的减法与位反转的性能。如果没有更多的背景,这个问题就无法得到具体回答。

答案 2 :(得分:1)

您可以使用BITWISE NOT运算符'〜'?

对于8位无符号整数,BITWISE NOT x = 255 - x

unsigned char x, u;
x = 12;
u = ~x;
printf (">> %d %d", u, x); // prints ">> 243 12"

答案 3 :(得分:0)

不要在错误的事情上浪费优化工作。

对占总运行时间1%的事物进行无限优化将需要付出无限的努力,并且总体性能提高1%。占运行时间10%的东西的10%的改进非常容易实现并产生相同的好处。

并且不要忘记编译器会进行自己的优化,如果从中获得任何好处,将包括您提议的那种简单替换。

不要过早优化。

编写代码 - 着眼于算法的效率,但不要试图计算指令和周期。在性能分析器下运行代码以找出它花费时间的位置。使用它来指导您应该通过更改算法(通常是更大的胜利)或通过微调代码来努力改进代码。根据需要重复。