求两个数中的较大值max(a,b)。(不用if,>)

小虾米 阅读:865 2020-10-19 15:34:56 评论:0

题目:求两个数的较大值,不能使用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 }

 输出:

 

声明

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

关注我们

一个IT知识分享的公众号