3823|6

6423

帖子

17

TA的资源

版主

楼主
 

四种变量交换方式 [复制链接]

  1. 不知道有没有人用后边三种方式
  2. __attribute__((noinline))void swap1(int *a, int *b)
  3. {
  4.         int tmp;
  5.         tmp = *a;
  6.         *a = *b;
  7.         *b = tmp;
  8. }

  9. __attribute__((noinline))void swap2(int *a, int *b)
  10. {
  11.         *a = *a + *b;
  12.         *b = *a - *b;
  13.         *a = *a - *b;
  14. }

  15. __attribute__((noinline))void swap3(int *a, int *b)
  16. {
  17.         (*a) ^= (*b) ^= (*a) ^= *b;
  18. }

  19. __attribute__((noinline))void swap4(int *a, int *b)
  20. {
  21.         *a = *a + *b - (*b = *a);
  22. }
复制代码
  1.   __tagsym$noinline
  2.     swap1
  3.         0x00006550:    e5913000    .0..    LDR      r3,[r1,#0]
  4.         0x00006554:    e5902000    . ..    LDR      r2,[r0,#0]
  5.         0x00006558:    e5803000    .0..    STR      r3,[r0,#0]
  6.         0x0000655c:    e5812000    . ..    STR      r2,[r1,#0]
  7.         0x00006560:    e12fff1e    ../.    BX       lr
  8.     i.swap2
  9.     __tagsym$noinline
  10.     swap2
  11.         0x00006564:    e5902000    . ..    LDR      r2,[r0,#0]
  12.         0x00006568:    e5913000    .0..    LDR      r3,[r1,#0]
  13.         0x0000656c:    e0822003    . ..    ADD      r2,r2,r3
  14.         0x00006570:    e5802000    . ..    STR      r2,[r0,#0]
  15.         0x00006574:    e5913000    .0..    LDR      r3,[r1,#0]
  16.         0x00006578:    e0422003    . B.    SUB      r2,r2,r3
  17.         0x0000657c:    e5812000    . ..    STR      r2,[r1,#0]
  18.         0x00006580:    e5901000    ....    LDR      r1,[r0,#0]
  19.         0x00006584:    e0411002    ..A.    SUB      r1,r1,r2
  20.         0x00006588:    e5801000    ....    STR      r1,[r0,#0]
  21.         0x0000658c:    e12fff1e    ../.    BX       lr
  22.     i.swap3
  23.     __tagsym$noinline
  24.     swap3
  25.         0x00006590:    e5902000    . ..    LDR      r2,[r0,#0]
  26.         0x00006594:    e5913000    .0..    LDR      r3,[r1,#0]
  27.         0x00006598:    e0222003    . ".    EOR      r2,r2,r3
  28.         0x0000659c:    e5802000    . ..    STR      r2,[r0,#0]
  29.         0x000065a0:    e5913000    .0..    LDR      r3,[r1,#0]
  30.         0x000065a4:    e0222003    . ".    EOR      r2,r2,r3
  31.         0x000065a8:    e5812000    . ..    STR      r2,[r1,#0]
  32.         0x000065ac:    e5901000    ....    LDR      r1,[r0,#0]
  33.         0x000065b0:    e0211002    ..!.    EOR      r1,r1,r2
  34.         0x000065b4:    e5801000    ....    STR      r1,[r0,#0]
  35.         0x000065b8:    e12fff1e    ../.    BX       lr
  36.     i.swap4
  37.     __tagsym$noinline
  38.     swap4
  39.         0x000065bc:    e5902000    . ..    LDR      r2,[r0,#0]
  40.         0x000065c0:    e5913000    .0..    LDR      r3,[r1,#0]
  41.         0x000065c4:    e5812000    . ..    STR      r2,[r1,#0]
  42.         0x000065c8:    e0833002    .0..    ADD      r3,r3,r2
  43.         0x000065cc:    e0431002    ..C.    SUB      r1,r3,r2
  44.         0x000065d0:    e5801000    ....    STR      r1,[r0,#0]
  45.         0x000065d4:    e12fff1e    ../.    BX       lr
复制代码

此帖出自编程基础论坛

最新回复

来学习一下啊  详情 回复 发表于 2015-5-25 08:44

赞赏

2

查看全部赞赏

点赞 关注
个人签名training
 

回复
举报

1万

帖子

24

TA的资源

版主

沙发
 
最后两种比较独特。
此帖出自编程基础论坛
 
 
 

回复

1560

帖子

24

TA的资源

五彩晶圆(初级)

板凳
 
这汇编代码看来,怎么感觉第一种更实用呢。
此帖出自编程基础论坛

点评

确实是,代码易懂,而且效率高  详情 回复 发表于 2015-5-24 20:42
 
个人签名这孩子,成熟的象征,理智的典范。
 
 

回复

6040

帖子

196

TA的资源

版主

4
 
后面的都属于中看不中用
此帖出自编程基础论坛

点评

恩,是啊  详情 回复 发表于 2015-5-24 20:42
 
 
 

回复

6423

帖子

17

TA的资源

版主

5
 
lonerzf 发表于 2015-5-24 17:42
这汇编代码看来,怎么感觉第一种更实用呢。

确实是,代码易懂,而且效率高
此帖出自编程基础论坛
 
个人签名training
 
 

回复

6423

帖子

17

TA的资源

版主

6
 
lcofjp 发表于 2015-5-24 20:17
后面的都属于中看不中用

恩,是啊
此帖出自编程基础论坛
 
个人签名training
 
 

回复

3028

帖子

0

TA的资源

五彩晶圆(初级)

7
 
来学习一下啊
此帖出自编程基础论坛
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表