5820|9

6040

帖子

196

TA的资源

版主

楼主
 

一个语句交换整形变量 [复制链接]

本帖最后由 lcofjp 于 2017-9-13 18:10 编辑
  1. #include <stdio.h>

  2. int main(int argc, const char * argv[]) {
  3.     // insert code here...
  4.     int a = 12, b = 34;
  5.     a = a ^ b ^ (b=a);
  6.     printf("a=%d, b=%d\n", a, b);
  7.     return 0;
  8. }
复制代码

这段代码在我的电脑可以正确运行,但是,这并不意味着什么,贴出这段代码并不是要大家模仿,因为我觉得这句代码很烂,但是我觉得这段代码要高于那种用三个异或语句的交换程序,美其名曰不用第三个变量。其实最简单实用的就是借助一个临时变量直接赋值的。
代码出处:
链接已隐藏,如需查看请登录或者注册



注意:这段代码在某些平台不能正确运行

最新回复

我没分了——我最喜欢队长发这种小题目了  详情 回复 发表于 2017-11-13 19:20
点赞 关注

回复
举报

9790

帖子

24

TA的资源

版主

沙发
 
我遇到一个函数是下边这样,注释掉的部分使用IAR编译有警告,能正常运行,分开写警告消失“Warning[Pa079]: undefined behavior: parameter "str" (declared at line 1152) (or a value reached by some form of indirection through it) is modified more than once  ....main.c 1158 without an intervening sequence point in this statement


  1. void reverse(char *str)
  2. {
  3.      int16_t i , j;
  4.      int16_t len = strlen(str);
  5.      for( i = 0 , j = len - 1 ; i < j ; i++ , j--)
  6.      {
  7.          //str[i]^=str[j]^=str[i]^=str[j];
  8.          str[i]^=str[j];
  9.          str[j]^=str[i];
  10.          str[i]^=str[j];
  11.      }
  12. }
复制代码


点评

是的,一个语句出现同一个变量的赋值和使用有警告是正常的,所以我说这是烂代码,就像那种傻逼的试题一样,一个语句同时包含多个i++,++i这种东西。  详情 回复 发表于 2017-9-13 15:34
 
个人签名虾扯蛋,蛋扯虾,虾扯蛋扯虾
 

回复

4177

帖子

9

TA的资源

五彩晶圆(高级)

板凳
 
我个人觉得异或运算还是比较不错的。。。。。。。。

点评

嗯,喜欢不需要理由,我不喜欢是因为它既不直观,效率也不高  详情 回复 发表于 2017-9-13 15:37
 
 
 

回复

6040

帖子

196

TA的资源

版主

4
 
littleshrimp 发表于 2017-9-13 10:59
我遇到一个函数是下边这样,注释掉的部分使用IAR编译有警告,能正常运行,分开写警告消失“Warning: undefi ...

是的,一个语句出现同一个变量的赋值和使用有警告是正常的,所以我说这是烂代码,就像那种傻逼的试题一样,一个语句同时包含多个i++,++i这种东西。
 
 
 

回复

6040

帖子

196

TA的资源

版主

5
 
huaiqiao 发表于 2017-9-13 14:59
我个人觉得异或运算还是比较不错的。。。。。。。。

嗯,喜欢不需要理由,我不喜欢是因为它既不直观,效率也不高

点评

效率还真没仔细考量过呢。。。。。。惭愧。。。。。。。。。。  详情 回复 发表于 2017-9-13 15:57
 
 
 

回复

4177

帖子

9

TA的资源

五彩晶圆(高级)

6
 
lcofjp 发表于 2017-9-13 15:37
嗯,喜欢不需要理由,我不喜欢是因为它既不直观,效率也不高

效率还真没仔细考量过呢。。。。。。惭愧。。。。。。。。。。

点评

[attachimg]321202[/attachimg][attachimg]321203[/attachimg] [attachimg]321204[/attachimg] 楼主位的代码由于在某些平台不能正确执行,不具有可移植性,所以不列出比较。  详情 回复 发表于 2017-9-13 18:08
 
 
 

回复

6040

帖子

196

TA的资源

版主

7
 
本帖最后由 lcofjp 于 2017-9-13 18:15 编辑
huaiqiao 发表于 2017-9-13 15:57
效率还真没仔细考量过呢。。。。。。惭愧。。。。。。。。。。




楼主位的代码由于在某些平台不能正确执行,不具有可移植性,所以不列出比较。
这是用windows平台下的visual c++的编译结果,如果有其他平台的结果,欢迎列出,尤其是用异或的方法更具有简洁的底层代码,也欢迎用异或的方式自己用汇编实现交换变量与直接用MOV进行对比。

点评

厉害了,队长。。。。这是我见过你回过的最不水的帖子了。。。。 哈哈,开玩笑的。感谢队长的回复呢  详情 回复 发表于 2017-9-13 18:16
 
 
 

回复

4177

帖子

9

TA的资源

五彩晶圆(高级)

8
 
lcofjp 发表于 2017-9-13 18:08
楼主位的代码由于在某些平台不能正确执行,不具有可移植性,所以不列出比较。
这是用windows平台 ...

厉害了,队长。。。。这是我见过你回过的最不水的帖子了。。。。

哈哈,开玩笑的。感谢队长的回复呢
 
 
 

回复

7815

帖子

57

TA的资源

裸片初长成(中级)

9
 
必须MARK
 
 
 

回复

7815

帖子

57

TA的资源

裸片初长成(中级)

10
 
我没分了——我最喜欢队长发这种小题目了
 
 
 

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

随便看看
查找数据手册?

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
快速回复 返回顶部 返回列表