首先想到用移位运算
其实方法很简单,就是相减后看符号位,将减的结果的符号位移位到末尾,再和1与操作,或者直接和0x80000000与,得出的符号位再右移至末尾,作为数组的下标。int型占4字节,即32位,在-1为补码的机器上,1代表负数,0代表正数
简单的c代码
int max1(int x,int y){
//符号相同,返回x,y中的大值
unsigned int z;
z=((x-y)>>31)&1;
return (1-z)*x+z*y;//这种写法很巧妙
}
int max2(int x,int y){
//符号不同&