直觉是这样的代码可以优化,但是怎么优化呢

cfvmario 2011-07-27 02:09:56

int a,b,c;
...
if (a==b)
{
a=c;
}
else if (a==c)
{
a=b;
}

第一感觉是直接a=b+c-a;不就完了,可是a如果和b c都不相等要不对a做任何操作,怎么办。。
...全文
112 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
stein42 2011-07-27
  • 打赏
  • 举报
回复
不要优化
meran 2011-07-27
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 ganjianh8 的回复:]
代码不是越短越好
而是越能一次反映出意思是最好
代码不是写给程序看的
而是写给人看的。
[/Quote]
正解。。楼主可以看看重构
luciferisnotsatan 2011-07-27
  • 打赏
  • 举报
回复
不过一眼看上去,还真不知道这代码在干嘛。
luciferisnotsatan 2011-07-27
  • 打赏
  • 举报
回复
if(!((a^b)&(a^c)))
{
a ^= b^c;
}

printf("%d",a);

试了几组数字,貌似没什么问题。

VC2005 debug下一次跳转,但多了几个指令。
if(!((a^b)&(a^c)))
00412301 mov eax,dword ptr [a]
00412304 xor eax,dword ptr [b]
00412307 mov ecx,dword ptr [a]
0041230A xor ecx,dword ptr [c]
0041230D and eax,ecx
0041230F jne main+5Dh (41231Dh)
{
a ^= b^c;
00412311 mov eax,dword ptr [b]
00412314 xor eax,dword ptr [c]
00412317 xor eax,dword ptr [a]
0041231A mov dword ptr [a],eax
}
if (a==b)
0041231D mov eax,dword ptr [a]
00412320 cmp eax,dword ptr [b]
00412323 jne main+6Dh (41232Dh)
{
a=c;
00412325 mov eax,dword ptr [c]
00412328 mov dword ptr [a],eax
0041232B jmp main+7Bh (41233Bh)
}
else if (a==c)
0041232D mov eax,dword ptr [a]
00412330 cmp eax,dword ptr [c]
00412333 jne main+7Bh (41233Bh)
{
a=b;
00412335 mov eax,dword ptr [b]
00412338 mov dword ptr [a],eax
}

东莞某某某 2011-07-27
  • 打赏
  • 举报
回复
无论从效率/可读性来说,这代码可以了,如此简单的逻辑还要再麻烦一下吗
luciferisnotsatan 2011-07-27
  • 打赏
  • 举报
回复
找到了把跳转命令降到一条的方法,但其他命令多出好几条,还不如原来的。
cfvmario 2011-07-27
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 zhao4zhong1 的回复:]
C/C++ code
a=((a==b)?c:((a==c)?b:a));
[/Quote]
没有区别吧。。?:运算符和if else编译出来的结果应该是一样的
赵4老师 2011-07-27
  • 打赏
  • 举报
回复
a=((a==b)?c:((a==c)?b:a));
ganjianh8 2011-07-27
  • 打赏
  • 举报
回复
代码不是越短越好
而是越能一次反映出意思是最好
代码不是写给程序看的
而是写给人看的。
ouyh12345 2011-07-27
  • 打赏
  • 举报
回复
没必要优化了,还能比这更简单、更直观?
cfvmario 2011-07-27
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 luciferisnotsatan 的回复:]
用switch case。不过这代码有优化的必要吗?
[/Quote]
case数少的情况下二者效率一样吧。case数多了由于跳转表switch才会更快
luciferisnotsatan 2011-07-27
  • 打赏
  • 举报
回复
用switch case。不过这代码有优化的必要吗?

69,373

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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