社区
C语言
帖子详情
c=(a==b)?a:b;和if(a==b) c=a; else c=b;那个快?
youthbcg
2005-04-10 07:20:19
c=(a==b)?a:b;和if(a==b) c=a; else c=b;那个快?
...全文
169
8
打赏
收藏
c=(a==b)?a:b;和if(a==b) c=a; else c=b;那个快?
c=(a==b)?a:b;和if(a==b) c=a; else c=b;那个快?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
8 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
zengwujun
2005-04-10
打赏
举报
回复
//看下面的汇编代码
c=(a==b)?a:b;
00401096 mov eax,dword ptr [ebp-4]
00401099 cmp eax,dword ptr [ebp-8]
0040109C jne main+36h (004010a6)
0040109E mov ecx,dword ptr [ebp-4]
004010A1 mov dword ptr [ebp-10h],ecx
004010A4 jmp main+3Ch (004010ac)
004010A6 mov edx,dword ptr [ebp-8]
004010A9 mov dword ptr [ebp-10h],edx
004010AC mov eax,dword ptr [ebp-10h]
004010AF mov dword ptr [ebp-0Ch],eax
810:
811: if(a==b)
004010B2 mov ecx,dword ptr [ebp-4]
004010B5 cmp ecx,dword ptr [ebp-8]
004010B8 jne main+52h (004010c2)
812: c=a;
004010BA mov edx,dword ptr [ebp-4]
004010BD mov dword ptr [ebp-0Ch],edx
813: else
004010C0 jmp main+58h (004010c8)
814: c=b;
004010C2 mov eax,dword ptr [ebp-8]
004010C5 mov dword ptr [ebp-0Ch],eax
//如果只考虑a!=b
c=(a==b)?a:b;
00401096 mov eax,dword ptr [ebp-4]//a进eax
00401099 cmp eax,dword ptr [ebp-8]//比较
0040109C jne main+36h (004010a6)//跳转进行a!=b处理
004010A6 mov edx,dword ptr [ebp-8]//b进edx
004010A9 mov dword ptr [ebp-10h],edx//把b赋给一个临时变量
004010AC mov eax,dword ptr [ebp-10h]//这个变量eax
004010AF mov dword ptr [ebp-0Ch],eax//c=这个变量
811: if(a==b)
004010B2 mov ecx,dword ptr [ebp-4]
004010B5 cmp ecx,dword ptr [ebp-8]
004010B8 jne main+52h (004010c2)
814: c=b;
004010C2 mov eax,dword ptr [ebp-8]//b进eax
004010C5 mov dword ptr [ebp-0Ch],eax//c=b;
所以说,c=(a==b)?a:b;会多产生一个临时变量,速度稍慢.
不知是否正确,请大侠指点
晨星
2005-04-10
打赏
举报
回复
不过这可能是个跟编译器有关的问题。
晨星
2005-04-10
打赏
举报
回复
哦,不对,前者可能临时变量存放表达式“(a==b)?a:b”的值,然后把临时变量的值赋给c,所以应该是后者快;
以下是VC6Debug版本产生的汇编代码。
14: c = (a == b) ? a : b;
00401052 mov eax,dword ptr [ebp-4]
00401055 cmp eax,dword ptr [ebp-8]
00401058 jne main+52h (00401062)
0040105A mov ecx,dword ptr [ebp-4]
0040105D mov dword ptr [ebp-1Ch],ecx
00401060 jmp main+58h (00401068)
00401062 mov edx,dword ptr [ebp-8] ;这两句把表达式的值放临时变量。
00401065 mov dword ptr [ebp-1Ch],edx
00401068 mov eax,dword ptr [ebp-1Ch] ;这两句把临时变量赋给c。
0040106B mov dword ptr [ebp-0Ch],eax
15: if(d == e)
0040106E mov ecx,dword ptr [ebp-10h]
00401071 cmp ecx,dword ptr [ebp-14h]
00401074 jne main+6Eh (0040107e)
16: f = d;
00401076 mov edx,dword ptr [ebp-10h]
00401079 mov dword ptr [ebp-18h],edx
17: else
0040107C jmp main+74h (00401084)
18: f = e;
0040107E mov eax,dword ptr [ebp-14h]
00401081 mov dword ptr [ebp-18h],eax
pcboyxhy
2005-04-10
打赏
举报
回复
要不要考虑CPU的指令流水线呢?
avalonBBS
2005-04-10
打赏
举报
回复
(a==b)?c=a:c=b;
ysbcg
2005-04-10
打赏
举报
回复
c=(a==b)?a:b;
mov eax,a
cmp eax,b
jne _st1
mov ecx,a
mov _tmp,ecx
jmp _st2
_st1:
mov edx,b
mov _tmp,edx
_st2:
mov eax,_tmp
mov c,eax
if(a==b) {
mov ecx,a
cmp ecx,b
jne _st3
c=a;
mov edx,a
mov c,edx
} else c=b;
jmp _st4
_st3:
mov eax,b
mov c,eax
_st4:
第一个多了一个_tmp步骤
heroboy2000
2005-04-10
打赏
举报
回复
不知道
关键在于编译器的优化
晨星
2005-04-10
打赏
举报
回复
一样快。
mysql-5.7.13-winx64.msi(Mysql5.7安装包)
源码下载地址: https://pan.quark.cn/s/a4b39357ea24 https://.com/docker-library/mysql Maintained by: the Docker Community and the MySQL Team This is the Git repo of the Docker "Official Image" for (not to be confused with any official image provided by upstream). See the Docker Hub page for the full readme on how to use this Docker image and for information regarding contributing and issues. The full image description on Docker Hub is generated/maintained over in the docker-library/docs repository, specifically in the directory. See a change merged here that doesn't show up on Docker Hub yet? For more information about the full official images change lifecycle, see the "An image's source changed in Git, now what?" FAQ entry. For outstanding i...
技术转移服务公司深陷高端成果与需求端断层困境?创新要素智能配置系统或成破局关键.docx
深度探索AI技术在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,研究科技创新领域的AI+数智化服务,推动科技创新与产业创新智能化发展。
【SMS Backup and Restore】
短信导出
微信小程序自定义组件开发项目-树形数据表格组件-支持多层级数据展示与交互-用于企业管理系统数据可视化展示-前端开发工具-数据表格渲染优化-微信小程序开发框架-自定义组件封装-树形结.zip
微信小程序自定义组件开发项目_树形数据表格组件_支持多层级数据展示与交互_用于企业管理系统数据可视化展示_前端开发工具_数据表格渲染优化_微信小程序开发框架_自定义组件封装_树形结.zipAI + 数据分析助手
基于springboot课程答疑系统设计与实现.7z(源码+论文)
目录 1系统概述 1.1 研究背景 1.2研究目的 1.3系统设计思想 2相关技术 2.1 MYSQL数据库 2.2 B/S结构 2.3 Spring Boot框架简介 2.4 VUE框架 3系统分析 3.1可行性分析 3.1.1技术可行性 3.1.2经济可行性 3.1.3操作可行性 3.2系统性能分析 3.2.1 系统安全性 3.2.2 数据完整性 3.3系统界面分析 3.4系统流程和逻辑 4系统概要设计 4.1概述 4.2系统结构 4.3.数据库设计 4.3.1数据库实体 4.3.2数据库设计表 5系统详细实现 5.1 管理员模块的实现 5.1.1 学生信息管理 5.1.2 科目类型管理 5.2 老师模块的实现 5.2.1 老师回答管理 5.2.1 我的收藏管理 5.2 学生模块的实现 5.2.2 学生问题 5.2.3 留言反馈 5.2.3 交流区 6系统测试 6.1概念和意义 6.2特性 6.3重要性 6.4测试方法 6.5 功能测试 6.6可用性测试 6.7性能测试 6.8测试分析 6.9测试结果分析 结论 致谢语 参考文献
C语言
70,038
社区成员
243,246
社区内容
发帖
与我相关
我的任务
C语言
C语言相关问题讨论
复制链接
扫一扫
分享
社区描述
C语言相关问题讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章