#define Mid(a,b,c) (a+b+c) - ((a>b?a:b)>c?(a>b?a:b):c)-((a

翅膀又硬了 2012-06-14 02:49:39
有没有更简单的方法
#define Mid(a,b,c) (a+b+c) - ((a>b?a:b)>c?(a>b?a:b):c)-((a<b?a:b)<c?(a<b?a:b):c)
返回中间大的值
...全文
436 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
wojiushi3344 2012-06-15
  • 打赏
  • 举报
回复
一个小小的宏居然能引出这么多的高手!!
赵4老师 2012-06-15
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 的回复:]
引用 10 楼 的回复:

#define Mid(a,b,c) ( ((b-a)*(a-c)>0?a:0) + ((a-b)*(b-c)>0?b:0) + ((a-c)*(c-b)>0?c:0) )


貌似还是我的简单哈。。哈哈
[/Quote]
小心算术溢出!
码农-彬少 2012-06-15
  • 打赏
  • 举报
回复
翅膀又硬了 2012-06-14
  • 打赏
  • 举报
回复
没想到引出这么多玉呀
Gloveing 2012-06-14
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 的回复:]

#define Mid(a,b,c) ( ((b-a)*(a-c)>0?a:0) + ((a-b)*(b-c)>0?b:0) + ((a-c)*(c-b)>0?c:0) )
[/Quote]

貌似还是我的简单哈。。哈哈
RiqueZhang 2012-06-14
  • 打赏
  • 举报
回复
为了对称,还可以这样定义:
#define _MID_(A, B, C) ((A>B)^(A>C))?A:(((B>C)^(B>A))?B:C)
#define _MID_(A, B, C) ((A<B)^(A<C))?A:(((B<C)^(B<A))?B:C)

[Quote=引用 15 楼 的回复:]

#define _MAX_(A, B, C) ((A>B)&(A>C))?A:(((B>C)&(B>A))?B:C)
#define _MIN_(A, B, C) ((A<B)&(A<C))?A:(((B<C)&(B<A))?B:C)
#define _MID_(A, B, C) ((A>B)^(B>C))?(((A>C)^(C>B))?A:C):B
[/Quote]
RiqueZhang 2012-06-14
  • 打赏
  • 举报
回复
#define _MAX_(A, B, C) ((A>B)&(A>C))?A:(((B>C)&(B>A))?B:C)
#define _MIN_(A, B, C) ((A<B)&(A<C))?A:(((B<C)&(B<A))?B:C)
#define _MID_(A, B, C) ((A>B)^(B>C))?(((A>C)^(C>B))?A:C):B
ybjx111 2012-06-14
  • 打赏
  • 举报
回复
参数未带()的宏基本上都不支持负数。
qixing1115 2012-06-14
  • 打赏
  • 举报
回复
#define mid(a,b,c) (a>b&&a>c)?(b>c?b:c):((a<b&&a<c)?(b<c?b:c):a)
翅膀又硬了 2012-06-14
  • 打赏
  • 举报
回复
厉害![Quote=引用 11 楼 的回复:]
#define MAX(a,b) (((a) + (b)) + abs((a) - (b))) / 2
#define MIN(a,b) (((a) + (b)) - abs((a) - (b))) / 2
#define MID(a,b,c) MIN( MAX(a,b) , MAX(b , c))
[/Quote]
morebread 2012-06-14
  • 打赏
  • 举报
回复
#define MAX(a,b) (((a) + (b)) + abs((a) - (b))) / 2
#define MIN(a,b) (((a) + (b)) - abs((a) - (b))) / 2
#define MID(a,b,c) MIN( MAX(a,b) , MAX(b , c))
Gloveing 2012-06-14
  • 打赏
  • 举报
回复
#define Mid(a,b,c) ( ((b-a)*(a-c)>0?a:0) + ((a-b)*(b-c)>0?b:0) + ((a-c)*(c-b)>0?c:0) )
赵4老师 2012-06-14
  • 打赏
  • 举报
回复
调用宏时要将参数用()括住。
HandanXiaoliang 2012-06-14
  • 打赏
  • 举报
回复
#define Min(x,y)	(x<y?x:y)
#define Max(x,y) (x>y?x:y)

#define Mid(x,y,z) Max(x,y)>z?Max(Min(x,y),z):Min(Max(x,y),z)
翅膀又硬了 2012-06-14
  • 打赏
  • 举报
回复
但是你分开应该把名字写清楚了呀

#define SUM(a,b,c) (a+b+c)
#define MAX(a,b,c) ((a>b?a:b)>c?(a>b?a:b):c)
#define MIN(a,b,c) ((a<b?a:b)<c?(a<b?a:b):c)

#define Mid(a,b,c) SUM(a,b,c) - MAX(a,b,c) - MIN(a,b,c)


翅膀又硬了 2012-06-14
  • 打赏
  • 举报
回复
分开写好看多了。其实我主要是想问问谁有其它比较巧妙的方法[Quote=引用 5 楼 的回复:]
我叫上另外一个同学
他是这样写的
#include <iostream>
using namespace std;

#define A(a,b,c) (a+b+c)
#define B(a,b,c) ((a>b?a:b)>c?(a>b?a:b):c)
#define C(a,b,c) ((a<b?a:b)<c?(a<b?a:b):c)

#define Mid(a,b,c) A……
[/Quote]
Olc 2012-06-14
  • 打赏
  • 举报
回复
我叫上另外一个同学
他是这样写的
#include <iostream>
using namespace std;

#define A(a,b,c) (a+b+c)
#define B(a,b,c) ((a>b?a:b)>c?(a>b?a:b):c)
#define C(a,b,c) ((a<b?a:b)<c?(a<b?a:b):c)

#define Mid(a,b,c) A(a,b,c) - B(a,b,c) - C(a,b,c)

int main(int argc, char* argv[])
{
int s=13,d=12,f=14;
cout << "Mid=" << Mid(s,d,f) <<endl;
return 0;
}[Quote=引用 4 楼 的回复:]
这样啊...感觉还是有灾难的感觉...
我再试试吧

引用 2 楼 的回复:
这个,感觉好像在看灾难片一样...(个人看法...可能菜鸟我太孤陋寡闻了)

#include <iostream>
using namespace std;
//#define Mid(a,b,c) (a+b+c) - ((a>b?a:b)>c?(a>b?a:b):c)-((a<b?a:b)<c?(a<……
[/Quote]
Olc 2012-06-14
  • 打赏
  • 举报
回复
这样啊...感觉还是有灾难的感觉...
我再试试吧[Quote=引用 2 楼 的回复:]
这个,感觉好像在看灾难片一样...(个人看法...可能菜鸟我太孤陋寡闻了)

#include <iostream>
using namespace std;
//#define Mid(a,b,c) (a+b+c) - ((a>b?a:b)>c?(a>b?a:b):c)-((a<b?a:b)<c?(a<b?a:b):c)

int min(int a,int b,int c)
{
……
[/Quote]
翅膀又硬了 2012-06-14
  • 打赏
  • 举报
回复
只能用宏实现。我开始没说清
Olc 2012-06-14
  • 打赏
  • 举报
回复
这个,感觉好像在看灾难片一样...(个人看法...可能菜鸟我太孤陋寡闻了)

#include <iostream>
using namespace std;
//#define Mid(a,b,c) (a+b+c) - ((a>b?a:b)>c?(a>b?a:b):c)-((a<b?a:b)<c?(a<b?a:b):c)

int min(int a,int b,int c)
{
int x = 0, y = 0, z = 0;
x = ((a>b?a:b)>c?(a>b?a:b):c);
y = ((a<b?a:b)<c?(a<b?a:b):c);
z = a + b + c ;
return (z - x - y);
}

int main(int argc, char* argv[])
{
int s=13,d=12,f=14;
cout << "Mid=" << min(s,d,f) <<endl;
return 0;
}

应该还有更好的办法,我这个...你觉得能看就看吧...
加载更多回复(1)
【顶级EI完美复现】电力系统碳排放流的计算方法【IEEE 14节点】(Matlab代码实现)内容概要:本文介绍了基于IEEE 14节点电力系统的碳排放流计算方法,并提供了Matlab代码实现,属于顶级EI期刊级别的研究成果复现。该方法通过建立电力系统中各节点的碳排放流动模型,结合潮流计算与电源出力特性,量化不同机组和线路的碳排放责任,进而实现对电力系统低碳运行的评估与优化。文中详细阐述了算法原理、数学模型构建及仿真步骤,适用于电力系统低碳化分析与碳足迹追踪研究。; 适合人群:具备电力系统基础知识和Matlab编程能力的高校研究生、科研人员及从事能源系统低碳化研究的专业技术人员,尤其适合致力于高水平论文复现与算法开发的研究者。; 使用场景及目标:①用于电力系统碳排放流的精确建模与可视化分析;②支撑“双碳”背景下电网低碳调度、绿色电力溯源与碳配额分配等应用场景;③为撰写高水平学术论文(如EI/SCI)提供可复现的技术路径与代码基础。; 阅读建议:建议读者结合IEEE 14节点系统标准数据,逐步运行并调试所提供的Matlab代码,深入理解碳流分配逻辑与矩阵运算实现方式,同时可拓展至其他节点系统以验证算法通用性。
基于STM32 F4的永磁同步电机无位置传感器控制策略研究内容概要:本文围绕基于STM32 F4的永磁同步电机(PMSM)无位置传感器控制策略展开研究,重点探讨在不依赖物理位置传感器的情况下,如何通过算法实现对电机转子位置和速度的精确估计与控制。文中结合嵌入式开发平台STM32 F4,采用如滑模观测器、扩展卡尔曼滤波或高频注入法等先进观测技术,实现对电机反电动势或磁链的估算,进而完成无传感器矢量控制(FOC)。同时,研究涵盖系统建模、控制算法设计、仿真验证(可能使用Simulink)以及在STM32硬件平台上的代码实现与调试,旨在提高电机控制系统的可靠性、降低成本并增强环境适应性。; 适合人群:具备一定电力电子、自动控制理论基础和嵌入式开发经验的电气工程、自动化及相关专业的研究生、科研人员及从事电机驱动开发的工程师。; 使用场景及目标:①掌握永磁同步电机无位置传感器控制的核心原理与实现方法;②学习如何在STM32平台上进行电机控制算法的移植与优化;③为开发高性能、低成本的电机驱动系统提供技术参考与实践指导。; 阅读建议:建议读者结合文中提到的控制理论、仿真模型与实际代码实现进行系统学习,有条件者应在实验平台上进行验证,重点关注观测器设计、参数整定及系统稳定性分析等关键环节。

65,208

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧