del*_*del 6 c++ optimization c++11
假设x和y是有符号整数,是否有一些实现的超级有效技巧:
if (x < y) {
std::swap(x, y);
}
Run Code Online (Sandbox Code Playgroud)
我可以立即想到使用的解决方案c = x < y,然后再分配x给c * x + (1 - c) * yetc。但是这种方法会发出乘法指令,我想避免这种情况。有办法单独摆弄吗?
编辑:只是澄清一下,我真正关心的是试图摆脱引起的分支if。换句话说,我知道进行交换的XOR技巧,但这不是我要的。
我不确定,这是加速您的代码,但这是无分支解决方案:
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char **argv) {
int a = atoi(argv[1]);
int b = atoi(argv[2]);
int c = a - b;
c &= c >> 31; // SXT for signed int
a -= c;
b += c;
printf("Result: %d %d\n", a, b);
}
Run Code Online (Sandbox Code Playgroud)