//大家好,我是yishuihan /*一看到这种不能用乘除、if等常规方法。那我们就要想到位运算; 在计算机中常用的就是与、或、非、异或、左移、右移运算等。 右移的情况比较复杂,假如是无符号数,那么右移,左边空出的位补0; 假如是有符号负数(正数),那么右移,左边会补1(补0); 所以建议使用左移; a和b相减,如果结果大于0,最高位为0;否则,为负数最高位为1; 因为 在计算机中是使用补码存储的;下面的1<<31位,就是用1去与上最高位; */ #define cmp(a,b) (((a)-(b))&(1<<31))==1?-1:1; //也可以这样写 #define cmp(a,b) (((a)-(b))&(0x80000000))==1?-1:1;