求两个数中的较大值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 }

 输出:

 

相关文章
|
8月前
leetcode-2006:差的绝对值为 K 的数对数目
leetcode-2006:差的绝对值为 K 的数对数目
69 0
|
算法
把数组里面数值排成最小的数
把数组里面数值排成最小的数
39 1
|
8月前
给定 n 个整数,求里面出现次数最多的数,如果有多个重复出现的数,求值最大的那个 给定n个整数,求里面出现次数最多的数,如果有多个重复出现的数,求出值最大的一
给定 n 个整数,求里面出现次数最多的数,如果有多个重复出现的数,求值最大的那个 给定n个整数,求里面出现次数最多的数,如果有多个重复出现的数,求出值最大的一
|
8月前
求两个整数的较大值
两幅图片展示,无文字描述。第一张图链接源为:[结果](https://so.csdn.net/so/search?q=%E7%BB%93%E6%9E%9C&spm=1001.2101.3001.7020)。
43 1
求两个整数的较大值
|
8月前
34.设s=1+1/2+1/3+…+1/n,求与8最接近的s的值及与之对应的n值
34.设s=1+1/2+1/3+…+1/n,求与8最接近的s的值及与之对应的n值
132 0
不用数组求多个数的最小值
不用数组求多个数的最小值
55 0
LeetCode-2044 统计按位或能得到最大值子集的数目
LeetCode-2044 统计按位或能得到最大值子集的数目
|
人工智能 Unix BI
1370:最小函数值(minval)
1370:最小函数值(minval)
|
Python
LeetCode 2006. 差的绝对值为 K 的数对数目
给你一个整数数组 nums 和一个整数 k ,请你返回数对 (i, j) 的数目,满足 i < j 且 |nums[i] - nums[j]| == k 。
103 0
01:判断数正负
01:判断数正负
124 0