C 不使用移位或异或,是否可以在x86中找到数字的最小/最大值?

C 不使用移位或异或,是否可以在x86中找到数字的最小/最大值?,c,x86,C,X86,我正在尝试用x86编写最小/最大函数。我已经能够通过使用移位和异或来实现这一点,但我需要找到一种不用这些用途来编写它的方法。有人能为我指出正确的方向吗?最大函数示例: int max(int *arr,int n){ int max=arr[0]; for(int i=0;i<n;i++)max=(arr[i]>max)?arr[i]:max; return max; } int max(int*arr,int n){ int max=arr[0];

我正在尝试用x86编写最小/最大函数。我已经能够通过使用移位和异或来实现这一点,但我需要找到一种不用这些用途来编写它的方法。有人能为我指出正确的方向吗?

最大函数示例:

int max(int *arr,int n){
    int max=arr[0];
    for(int i=0;i<n;i++)max=(arr[i]>max)?arr[i]:max;
    return max;
    }
int max(int*arr,int n){
int max=arr[0];
对于(int i=0;imax)?arr[i]:max;
返回最大值;
}
这将以整数数组(
arr
)及其大小(
n
)作为参数,并返回数组中包含的最大值


要查找最小更改
max=(arr[i]>max)?arr[i]:max
max=(arr[i]
为什么需要移位和异或来查找最小值和最大值,以及为什么x86与之有任何关系?难道你不能使用
CMOV
?或者只是用C编写
min
函数,然后用
gcc-mtune=native-O2-fverbose asm-S
编译它……这是一个很好的解决方案,但循环本身就包含跳跃,我无法使用。显然有一个分支预测解决方案,但我似乎无法理解这一点,毕竟这是一个家庭作业…你不能处理没有循环的数组。如果你真的不能使用循环,你可以使用递归。现在如果你只是比较两个数,一个简单的
max=(a>b?a:b)
就可以了。