社区
C++ 语言
帖子详情
C语言中if(x>y)和if(x-y>0)这两个条件等价吗?
CyberLogix
2010-06-12 02:08:46
如果x,y都是int类型
C语言中if(x>y)和if(x-y>0)这两个条件等价吗?
...全文
528
14
打赏
收藏
C语言中if(x>y)和if(x-y>0)这两个条件等价吗?
如果x,y都是int类型C语言中if(x>y)和if(x-y>0)这两个条件等价吗?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
14 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
gz_qmc
2010-06-12
打赏
举报
回复
x>y
mov x
mov y
cmp
ju ..............
x-y>0
mov x
mov y
sub
jn
一个效果
dsswxl
2010-06-12
打赏
举报
回复
在逻辑上这两句是一样的,数学老师教的。
在效率上,if (x > y)效率会高一点。以下是他们各自的汇编代码:
if (x > y)
00401056 mov eax,dword ptr [ebp-4] ;2个时钟周期
00401059 cmp eax,dword ptr [ebp-8] ;13个时钟周期
0040105C jle main+35h (00401065) ;16个时钟周期
if (x - y > 0)
00401065 mov ecx,dword ptr [ebp-4] ;2个时钟周期
00401068 sub ecx,dword ptr [ebp-8] ;13个时钟周期
0040106B test ecx,ecx ;3个时钟周期
0040106D jle main+46h (00401076) ;16个时钟周期
显然第一种写法运行速度快些。
Xiaoloveliuforever
2010-06-12
打赏
举报
回复
当然 我的汇编的确是学的很烂的 完全是个门外汉
Xiaoloveliuforever
2010-06-12
打赏
举报
回复
[Quote=引用 6 楼 jenf 的回复:]
看了debug下的汇编,第一个3行代码:
mov
cmp
jle
第二个四行代码:
mov
sub
test
jle
[/Quote]
如果让我用汇编来写这段代码的话 恐怕不止这几行
colorfulcode
2010-06-12
打赏
举报
回复
晕,当我放屁,
原来大前提:“如果x,y都是int类型”
alwjuq
2010-06-12
打赏
举报
回复
if(x-y>0)
要先计算x-y 然后和0比较
要多做一步
colorfulcode
2010-06-12
打赏
举报
回复
unsigned int a ,b;
a=9;
b=100;
cout << (a>b)<<endl; // 0
cout << (a-b>0)<<endl; // error
Zeilone
2010-06-12
打赏
举报
回复
[Quote=引用 6 楼 jenf 的回复:]
看了debug下的汇编,第一个3行代码:
mov
cmp
jle
第二个四行代码:
mov
sub
test
jle
[/Quote]
cmp = sub + test吧?
很久没研究过汇编了
感觉上应该一样
jenf
2010-06-12
打赏
举报
回复
看了debug下的汇编,第一个3行代码:
mov
cmp
jle
第二个四行代码:
mov
sub
test
jle
向立天
2010-06-12
打赏
举报
回复
如果是浮点型应该用if(x-y>0)
因为浮点型数据有精度问题
lylm
2010-06-12
打赏
举报
回复
等价,x>y效率高
CyberLogix
2010-06-12
打赏
举报
回复
欢迎深入讨论,而不是泛泛而谈
别逗我乐
2010-06-12
打赏
举报
回复
在
逻辑
上是等价的,
在
效率
上,等待大牛回答!!
wanilyer
2010-06-12
打赏
举报
回复
等价
《回复内容太短了》
C语言
--视频精讲
C语言
作为被长期使用的编程语言,可以被运用到各种操作系统,游戏,开发
中
。本课程作为互联网上首家使用C99录制的
C语言
教程,展现了全面、专业。标准的
C语言
教程。可以帮助学员从基础开始一点点的深刻理解
C语言
。
求最小值的宏:#define min(x,y) x > y? y: x
中
的陷阱,慎用
求最小值的宏:①#define min(x,y) x > y? y: x。这个宏网上遍地都是,殊不知,这个宏存在严重bug。 顺便再列一下,下面这几个宏也存在严重bug,使用前一定要仔细考虑 ②#define min(x,y) (x) > (y)? (y): (x) ③#define min(x,y) ((x) > (y)? (y): ...
C语言
中
For循环语句的一个大坑
通过学习
c语言
,想必大家都了解了for循环语句:for(
条件
一;
条件
二;
条件
三),但我们今天来讲讲for语句的一个坑for(
条件
一;
条件
二,
条件
三;
条件
四) 对于for(
条件
一;
条件
二;
条件
三)想必大家手到擒来比如 int main() { int x,y; for(x=30,y=0;x>=10;x--,y++){ x/=2,y+=2; printf("x=%d,y=%d\n",x,y); } printf("x=%
c语言
push,
C语言
push(x,y)
C语言
中
If(!x) y ++; x)If(!x)y++;在
C语言
中
if的
条件
为两种,真和假.真的情况,1==1和任何非零值可以看为真.比如if(2==2)和if(1)看成是满足
条件
.假的情况,1==2和0都可以看为假,比如if(1==2x>=y>=z
c语言
z>=y>=x;的意思是先求z>=y的值也就是4>=4;这个结果是真,也就是1然后求1>=x也就是...
写出下列代数式对应的
C语言
表达式,与数学式子 对应的
C语言
表达式是[5]. A) 3*x^n(2*x-1)...
数学表达式对应的
C语言
表达式是“x*y/(x^2+y^2)”.错在哪里^在
c语言
中
不再是幂次运算,而是二进制的位运算,表示异或所以这个表达式应该写成“x*y/(x*x+y*y)”
c语言
题目:与
条件
表达式“(n)?(c++):(c--)”
中
的表达式(n)
等价
的表达式是 .if(n!=0)(c++);else(c--);问号就是三目运算符.就是a?b:c;当a为真时,即a不等于0时执行b;否则执行c!...
C++ 语言
64,652
社区成员
250,508
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章