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

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

 输出:

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值