使用两种宏定义的方法实现 得到两个数的最小值和最值


方法一: 利用三重条件运算符

#include <stdio.h>
#define MIN(A,B) ( (A) > (B) ? (B) : (A) )
#define MAX(A,B) ( (A) > (B) ? (A) : (B) )
int main(void)
{printf("%d\n",MIN(12,334));printf("%d\n",MAX(12,334));return 0;
}

值得关注的是:
   1 .  宏定义的变量在引用的时候,用 ()括起来,防止预处理器展开的错误。
   2 . (a > b ?   action1 :  action2 ) 这样的方式和 if —else 结果一样,但他会使得编译器产生更优化的代码,这在嵌入式编程中比较重要。


方法二: typeof 关键字

#include <stdio.h>#define MIX(X,Y) ({\typeof(X) x_ = (X);\typeof(Y) y_ = (Y);\(x_< y_)? x_:y_;\
})
#define MAX(X,Y) ({\typeof(X) x_ = (X);\typeof(Y) y_ = (Y);\(x_>y_)? x_:y_;\
})int main(int argc, char const *argv[])
{int num1,num2;printf("input two numbers:");scanf("%d %d",&num1,&num2);printf("mix is %d,max is %d\n",MIX(num1,num2),MAX(num1,num2));return 0;
}

值得借鉴的是:
 
  1 . typeof  关键字 用于获得变量的数据类型 。
 
  2 . 宏定义的实现,用 { } 作为宏整体,里面是一个代码块,语句用 ; 隔开 。
 
  3 . 当宏的实现长度很长的时候,使用换行符    \  换到下一行 。
 
  4 . 使用输入数据的类型定义局部变量 x_ 和 y_ 实现对原始数据的保护。
 
  5 . 宏实现,不能用 ; 结尾

18.用宏定义实现 得到两个数的最值相关推荐

  1. 获取两个数百分比的值

    1 /** 2 * 获取两个数百分比的值 3 * 4 * @param num1 5 * @param num2 6 * @param retain 保留小数位数 7 * @return 8 */ 9 ...

  2. 编程笔试(解析及代码实现):序列重排之给一个长度为n的序列A,求找出某种排列方式使得相邻两个数的差值之和最大并求出该最大值

    编程笔试(解析及代码实现):序列重排之给一个长度为n的序列A,求找出某种排列方式使得相邻两个数的差值之和最大并求出该最大值 目录 题目描述 代码实现 题目描述 序列重排:给一个长度为n的序列A,求找出 ...

  3. Verilog学习之求两个数的差值设计

    文章目录 前言 一.题目描述 二.代码展示 总结 前言 今天我们做的是第七道题--求两个数的差值,其实听名字就可以知道这道题其实特别的简单,只是两个数之间的比较求差而已,所以这道题我们就不具体写思路了 ...

  4. 在Java中获取两个数的中间值(超大数值)

    //获取两个数的中间值(超大数值) public class MidValue {public static void main(String[] args) {method1();//两数相加后除二 ...

  5. 牛客VL7 求两个数的差值

    题目描述: 根据输入信号a,b的大小关系,求解两个数的差值:输入信号a,b为8bit位宽的无符号数.如果a>b,则输出a-b,如果a≤b,则输出b-a. 接口信号图如下: 核心代码: alway ...

  6. C语言宏定义实现交换两个变量方法汇总

    小硕第三个年头了,最近小编忙着各种跑宣讲会,参加各种面试,搞的遍体鳞伤.今天难得静下心来,先总结下有关"交换两个变量的宏定义实现"的三种方式,相信没思考过的朋友们第一次遇到这种问题 ...

  7. C语言学习笔记-宏定义-SWAP交换两个变量值

    面试中经常考到的一个题.原理跟 a=a+b;   b=a-b;  a=a-b;  一样的,很简单,不解释. //宏定义 交换两个变量的值.使用异或运算. #define SWAP(a,b) {a=a^ ...

  8. java小数点默认定义_java求两个数后小数点默认无限长度

    闲来没事,写个求两个数相除,想看看后面的小数,此算法可快速算出小数点后千万位. import java.io.BufferedWriter; import java.io.File; import j ...

  9. Java基础编程题目——定义一个比较两个数大小的方法

    编写一个方法判断两个数的大小,并返回较大的值 import java.util.Scanner;public class Max {public static void main(String[] a ...

最新文章

  1. 漫画 | 一台 Linux 服务器最多能支撑多少个 TCP 连接?
  2. MySQL的转义字符“\”
  3. iOS UUID配合keychain的替换方案实现
  4. firewalld的防火墙
  5. 在2020年学习cocos游戏引擎
  6. 哈佛大学单细胞课程|笔记汇总 (二)
  7. 华图砖题库php文件怎么打印_事业单位招聘考试《工会基础知识》试题库及答案1380题...
  8. 《天天数学》连载11:一月十一日
  9. 真的已经讲烂了!java字符串转对象
  10. 浅谈ThinkPHP(三)
  11. Unix环境高级编程(十九)终端I/O
  12. 《数字图像处理 第三版》(冈萨雷斯)——第十一章 表示和描述
  13. 【计算机网络自顶向下方法】(哈工大)学习笔记
  14. 员工管理系统数据库课程设计
  15. debian关闭图形界面_禁止debian自动启动图形界面
  16. 阴历转换阳历c语言csdn,JavaScript实现公历转换农历
  17. 5年后端WEB开发者的开机必备软件
  18. 微信小程序:enablePullDownRefresh、onReachBottomDistance 、动态设置窗口的背景色、动态设置下拉背景字体
  19. UML软件建模之UML的构成
  20. aws云服务器会自动扣费吗,AWS云服务免费套餐竟然扣钱了?可能是因为你的region没管好...

热门文章

  1. 创建Unicode格式的INI文件
  2. 雾里散步——这次聊聊自已
  3. 无边框窗体的移动(winform/wpf)
  4. SCCM2007 R2部署Windows7,SCCM系列之八
  5. Java-JSTL(JSP标准标签库)
  6. 基于TensorFlow的2个机器学习简单应用实例
  7. Opencv中常见的滤波方法
  8. ubuntu下安装vim失败
  9. Moore-Penrose广义逆:可解决MATLAB报错“矩阵接近奇异值,或者缩放错误。结果可能不准确”
  10. hadoop jetty的应用