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 打赏 收藏 转发到动态 举报
写回复
用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
  • 打赏
  • 举报
回复
等价

《回复内容太短了》

64,652

社区成员

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

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