題目:求兩個數的較大值,不能使用if、>。
1.不使用if、>,還要比較大小,貌似就只能使用條件表達式:
x=<表達式1>?<表達式2>:<表達式3>; (表達式1為true時,返回表達式2;否則返回表達式3)
2. 本題目中使用條件表達式:
max(a.b)=<表達式1>? b:a; (表達式1為true時,返回b;否則返回a)
3.如何寫表達式1,區分a與b的大小。(不用>)
可以使用位運算,判斷a-b的符號位。符號位為1(負數),a<b;符號位為0(正數),a>=b。
bool運算,非0表示true,0表達false。
實例代碼看如下:
1 #include<stdio.h> 2 3 /** 4 (a-b)&0x80000000 5 32為機器,int,最高位置1 6 使用“與“運算判斷a-b是否為非負數 7 */ 8 #define max(a,b) (((a-b)&0x80000000)?b:a) 9 int main() 10 { 11 printf("sizeof(int)=%d\n",sizeof(int)); 12 printf("max(2,3)=%d\n",max(2,3)); 13 printf("max(2,2)=%d\n",max(2,2)); 14 printf("max(0,2)=%d\n",max(2,0)); 15 return 0; 16 }
輸出: