C语言编写程序,下面这个程序怎么写

[复制链接]
1667|22
 楼主| 畅想天子 发表于 2020-2-26 17:44 | 显示全部楼层 |阅读模式
整形变量a=10,b=20交换a,b 的数值,而不适用任何中间变量。
zolee 发表于 2020-2-26 17:52 | 显示全部楼层
具体代码如下:
a=a+b;
b=a-b;
a=a-b;

评论

@zyj9490 :你是个没接触过高密度运算的井底之蛙。  发表于 2020-2-27 09:02
@zyj9490 :蠢货,溢出了结果依然是对的。  发表于 2020-2-27 09:01
奇思形巧而已。还是在架构上多动心思。现在省内存不合理。  发表于 2020-2-26 21:51
二者之和有可能溢出。  发表于 2020-2-26 21:50
 楼主| 畅想天子 发表于 2020-2-26 20:00 | 显示全部楼层
zolee 发表于 2020-2-26 17:52
具体代码如下:
a=a+b;
b=a-b;

感谢您的帮助,学习了
前功尽弃 发表于 2020-2-27 08:27 | 显示全部楼层
估计是面试的题目或则是试卷的题目
 楼主| 畅想天子 发表于 2020-2-27 16:23 | 显示全部楼层
前功尽弃 发表于 2020-2-27 08:27
估计是面试的题目或则是试卷的题目

是的,面试题
 楼主| 畅想天子 发表于 2020-2-27 16:29 | 显示全部楼层
采用加减运算,有可能存在溢出,有没有更好的答案
vrgood 发表于 2020-2-27 22:45 | 显示全部楼层
用xor,不会溢出。
a=a^b
b=b^a
a=a^b
R2D2 发表于 2020-2-28 08:21 | 显示全部楼层
畅想天子 发表于 2020-2-27 16:29
采用加减运算,有可能存在溢出,有没有更好的答案

n你跟zyj9490一样蠢,你就不会验算一下溢出会不会出问题吗?连正确答案都看不懂的玩意儿还想通过面试?

评论

@zyj9490 :有本事验算一遍溢出为什么会不对,没本事跪墙角凉快去吧。  发表于 2020-2-28 08:41
因炎而得病从疯人院跑出来的。  发表于 2020-2-28 08:35
jackyhuang1988 发表于 2020-2-28 15:53 | 显示全部楼层
都直接跟你说了a=10, b=20了。那就a=20, b=10得了

评论

回答正确。 从资源使用看,如果是汇编只占用两个内存空间。a和b指向内存地址(直接地址),内存内容为10、20。 如果编译器是c环境,则可能会用4个内存,两个立即数和两个地址指针a和b。  发表于 2020-2-29 21:08
憨厚诚实大叔 发表于 2020-2-28 18:05 | 显示全部楼层
只想跟面试官吹牛,不想做面试题又要找工作了我
R2D2 发表于 2020-2-28 21:36 | 显示全部楼层
验算一下,设a=0xd0,b=0xc1,类型都是uint8_t
a=a+b;  a=0x91; 发生溢出正确结果是0x191,溢出后0x100被丢弃
b=a-b;  b=0xd0; 发生溢出,实际上减过后应该是0xffffffd0,前面的ff被丢弃
a=a-b; a=0xc1; 发生溢出,实际上减过后应该是0xffffffc1,前面的ff被丢弃

可以很清楚的看到,三次运算发生了三次溢出,但是转换结果依然是正确的。zyj9490和楼主这么蠢,你们的妈妈知道吗???
wx85105157 发表于 2020-2-29 09:16 | 显示全部楼层
R2D2 发表于 2020-2-28 21:36
验算一下,设a=0xd0,b=0xc1,类型都是uint8_t
a=a+b;  a=0x91; 发生溢出正确结果是0x191,溢出后0x100被丢 ...

666 点赞
ygd8718 发表于 2020-2-29 12:25 | 显示全部楼层
本帖最后由 ygd8718 于 2020-2-29 12:44 编辑

题面解法:
一、
a=b;
b=b/2;或b=a/2;
二、
b=a; 或b=b-a;
a=a+a;或a=a*2;或a=b*2;

从资源占用率和运算速度考虑,先用加减,后用乘除。
虽然题中规定不用第三变量,但在单片机运算过程中始终有周边寄存器Rn参与其中。如果用汇编语言解法更为简单。





R2D2 发表于 2020-3-2 17:24 | 显示全部楼层
这个问题的答案可以去这个帖子29楼下载书籍,在第2章第19节。
https://bbs.21ic.com/icview-323262-2-1.html
yyf018 发表于 2020-3-3 08:18 | 显示全部楼层
mks666 发表于 2020-3-3 10:30 | 显示全部楼层
a+b=a,a-b=b居然不ok
您需要登录后才可以回帖 登录 | 注册

本版积分规则

58

主题

333

帖子

2

粉丝
快速回复 在线客服 返回列表 返回顶部