社区
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)这两个条件等价吗?
...全文
803
14
打赏
收藏
C语言中if(x>y)和if(x-y>0)这两个条件等价吗?
如果x,y都是int类型C语言中if(x>y)和if(x-y>0)这两个条件等价吗?
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用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语言
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也就是...
求最小值的宏:#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=%
小心a>b和a-b>0的关系
在数学
中
,a>b和a-b>0这
两个
式子是
等价
的,但在计算机
中
,它们没有任何关系: 如果a>b,那么a-b>0吗?显然不是,举个例子: int a = Integer.MAX_VALUE; int b = -1; System.out.println(a > b); System.out.println(a - b);反过来,如果a
C语言
结构指针详解(推荐)
这篇文章非常清楚,一定要转下 --------------------------------------------- 这篇文章是九九年写的,这篇文章适合
中
级程序员。有不明白之处不要紧,多看几遍,然后花些时间上机操作及认真思考每个问题。遇到难题要研究、解决,难题出现于哪里?该用什么方式来解决?为什么要选择这个方式解决?有其它的解决方法吗?这样的解决方案完美吗?其实做个程序员这些基本的思考心得...
C++ 语言
65,185
社区成员
250,526
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章