我正在用C编写一个程序(优化很重要),它使用unsigned char,我必须从255中抽取这些char,即如果我有一个unsigned char x,我必须计算255-x。由于这只是反转8位,有没有办法告诉编译器这样可以更快地完成?或者CPU是否已经知道并且只是反转位,所以255-x是最快的方式?
答案 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%的改进非常容易实现并产生相同的好处。
并且不要忘记编译器会进行自己的优化,如果从中获得任何好处,将包括您提议的那种简单替换。
不要过早优化。
编写代码 - 着眼于算法的效率,但不要试图计算指令和周期。在性能分析器下运行代码以找出它花费时间的位置。使用它来指导您应该通过更改算法(通常是更大的胜利)或通过微调代码来努力改进代码。根据需要重复。