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

 输出:

 

时间: 2024-12-31 00:40:31

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

求两个数中最大值,不用判断语句

#include "iostream.h" #include "math.h" #define bits ( sizeof( int ) * 8 - 1 ) static int CheckFlag( int x, int y ) { int s1 = x >> bits; int s2 = y >> bits; s1=abs(s1); s2=abs(s2); return ( s1 * 2 + s2 ); } static int Same

c-用C语言实现在键盘输入两个十进制数,然后在屏幕输出这两个数中较大的那个数

问题描述 用C语言实现在键盘输入两个十进制数,然后在屏幕输出这两个数中较大的那个数 我是这样写的: #include #include void main() { scanf("%d,%d",&a,&a,&b); c=max(a,b); print("max=%d",c); return 0; } 可是怎么就不对了呢?想不明白..啊-- 解决方案 1;如wolf所说,多一个&a,多return 0; 2;a,b,c没定义 3;我记得标

算法 数据结构-求两个数最大公约数,欧几里得算法

问题描述 求两个数最大公约数,欧几里得算法 求两个数最大公约数,欧几里得算法,这两种方法除第一种可以避免除数为零的情况,两者有什么区别?谢谢 public static int gcd(int p, int q) { if (q == 0) return p; int r = p % q; return gcd(q, r) ; } public static int gcd(int p, int q) { int r = p % q; if (r == 0) return q; return g

JavaScript使用Math.Min返回两个数中较小数的方法_javascript技巧

本文实例讲述了JavaScript使用Math.Min返回两个数中较小数的方法.分享给大家供大家参考.具体如下: 下面JavaScript通过Math.Min返回两个数中较小的那个 <!DOCTYPE html> <html> <body> <p id="demo"> Click the button to return the lowest number of 5 and 10. </p> <button onclic

详解C语言求两个数的最大公约数及最小公倍数的方法_C 语言

求两个正整数的最大公约数       思路:这是一个很基本的问题,最常见的就是两种方法,辗转相除法和辗转相减法.通式分别为 f(x, y) = f(y, x%y), f(x, y) = f(y, x - y) (x >=y > 0).根据通式写出算法不难,这里就不给出了.这里给出<编程之美>上的算法,主要是为了减少迭代的次数.      对于x和y,如果y = k * y1, x= k * x1,那么f(x, y) = k * f(x1, y1).另外,如果x = p * x1,假

求两个正则表达式,谢谢大神!

问题描述 小弟初学者,求教2个正则表达式.1:textbox控件只允许输入纯数字和小数点,小数点后3位保留.2:同1,但是还允许输入-号,也就是负数.再次谢谢啦. 解决方案 解决方案二:可以在textchanged时间里面完成这样ui能够实施判断可提高用户使用性至于你说的正则用tryparse就可以判断了解决方案三:1.^d+(.d{1,3})?$2.^-?d+(.d{1,3})?$ 解决方案四:winfrom下参考:http://blog.csdn.net/wuyazhe/article/de

算法实现-请教JAVA如何得到两个数 之前的最小比例

问题描述 请教JAVA如何得到两个数 之前的最小比例 比如 5:10 = 1:2 45:60 = 3:4 自己心算一下就算出来了,写函数完全没有办法,高手请帮帮忙! 解决方案 数学问题,求两个数的最大公约数问题.多个数的最小比例,就求多个数的最大公约数. 然后每个数字除以最大公约数,就是他们的简化比例.最大公约数可用辗转相除法. 解决方案二: public class Test { public static void main(String[] args) { minScale(60, 15)

【11】不能使用四则运算求两个整数的和

题目:给定两个整数a和b,要求不能使用+.-.*./四则运算求两个数的和 方案:1. 四则运算不能算的情况下,肯定只能借助位运算,所以应该考虑位运算            2. 假设两个数的二进制位00101 和 10001,两个数相加的过程就是                第一步:先把二进制的各位相加但不进位,10100:                第二步:记下进位,00010                第三步:把前两步的结果相加,得到10110            3. 分析上述

任意元素和-求一个数组中选出任意个数元素相加之和,求大神指教

问题描述 求一个数组中选出任意个数元素相加之和,求大神指教 求一个数组中选出任意个数元素相加之和,求大神指教 比如打印出arry[8]中,任意两个数相加的和,任意三个数相加的和,直到任意八个数相加的和. 求大神指教. 解决方案 不知道你用的什么语言 如果C#,参考我写的http://bbs.csdn.net/topics/390550326 这个问题其实就是求M选N,其中M=8,N循环1-8 然后得到每个组合再求和. 解决方案二: 不知道你使用的是什么语言,不过思路是这样的,你的要求是不是随机数