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

简介: 题目:求两个数的较大值,不能使用if、>。 1.不使用if、>,还要比较大小,貌似就只能使用条件表达式:   x=?:;  (表达式1为true时,返回表达式2;否则返回表达式3)   2. 本题目中使用条件表达式:   max(a.b)=? b:a;  (表达式1为true时,返回b;否则返回a)   3.如何写表达式1,区分a与b的大小。

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

 输出:

 

相关文章
|
6月前
给定 n 个整数,求里面出现次数最多的数,如果有多个重复出现的数,求值最大的那个 给定n个整数,求里面出现次数最多的数,如果有多个重复出现的数,求出值最大的一
给定 n 个整数,求里面出现次数最多的数,如果有多个重复出现的数,求值最大的那个 给定n个整数,求里面出现次数最多的数,如果有多个重复出现的数,求出值最大的一
|
4天前
判断最大值
【10月更文挑战第31天】判断最大值。
17 7
|
6月前
求两个整数的较大值
两幅图片展示,无文字描述。第一张图链接源为:[结果](https://so.csdn.net/so/search?q=%E7%BB%93%E6%9E%9C&spm=1001.2101.3001.7020)。
35 1
求两个整数的较大值
|
6月前
34.设s=1+1/2+1/3+…+1/n,求与8最接近的s的值及与之对应的n值
34.设s=1+1/2+1/3+…+1/n,求与8最接近的s的值及与之对应的n值
101 0
|
6月前
|
人工智能
PTA-求一组数中大于平均值的数的和
求一组数中大于平均值的数的和
60 0
|
6月前
|
Python
计算小于或等于n的非负整数区间包含的1的数量
计算小于或等于n的非负整数区间包含的1的数量
57 0
|
11月前
不用数组求多个数的最小值
不用数组求多个数的最小值
42 0
|
人工智能 Unix BI
1370:最小函数值(minval)
1370:最小函数值(minval)
|
机器学习/深度学习
欧拉函数:求小于等于n且与n互质的数的个数
求小于等于n且与n互质的数的个数 互质穷举法 互质:两个数互质代表两者最大公约数为1 最大公约数求法:辗转相除法,最小公倍数:较大值除以最大公约数乘以较小值 辗转相除法: 较大的数a取模较小的数b,得取模值c 若取模值等于0 则最大公约数为取模值,否则继续下一步 a与c再次取模,回到第二步 //求最大公约数gcd以及最大公倍数lcm // 36 24 36/24 // 24 12 24/12 // 0 结束最大公约数为12 // 求最小公倍数 // lcm(a, b) = (a * b)/g
135 0
|
算法
利用二分查找获得List中小于并且最接近的数
利用二分查找获得List中小于并且最接近的数
201 0