不使用第三个变量完成x和y变量值交换,你会吗?
不使用第三个变量完成x和y变量值交换。前两天编写迪文屏程序遇到该问题,当时没有解决,今天在看CRC校验时找到了答案,其实这些都是数学知识,大学毕业后把数学忘的差不多了。哎~ 移位??????????????? 两次异或.不过这是里有个陷阱,不建议这样处理. int x=1,y=2;
System.out.println("x="+x+" y="+y);
x=x^y;
y=x^y;
x=x^y;
System.out.println("x="+x+" y="+y); x=x+y;
y=x-y;
x=x-y;
不过不建议这样操作。 本帖最后由 sibtck 于 2015-3-19 15:12 编辑
dmmcu 发表于 2015-3-19 15:06
int x=1,y=2;
System.out.println("x="+x+" y="+y);
x=x^y;
a ^= a;
a ^= a;
a ^= a;
=> a=0...
所以执行前要判断这两个数地址是否相等. LZ在LZ位说找到答案了,能共享出来不? 黑夜之狼 发表于 2015-3-19 15:12
LZ在LZ位说找到答案了,能共享出来不?
楼上已有答案,该问题在这里肯定不是问题,但对像我这样不好好学习的是个问题,发出感叹一下数学太差 程序是要写得清晰明了,易于维护,
没必要玩那么多花招,除非能极大的提高效率。 这个问题还真没想过呢?回头试试楼上高人的回答是否行得通。不过楼主可以说说答案啊。让我们见识一下。 sibtck 发表于 2015-3-19 15:10
a ^= a;
a ^= a;
a ^= a;
我找到的答案就是使用异或,该缺陷在什么情况下会出现。x、y是变量,不是指针,只用在嵌入式c语言中,还会存在此缺陷吗 myin4 发表于 2015-3-19 15:19
程序是要写得清晰明了,易于维护,
没必要玩那么多花招,除非能极大的提高效率。 ...
前两天就遇到该问题,但是发现寄存器已用完,所以只能重新分配寄存器,又多花了半天时间。当然,目前工作中遇到这类问题的机率是很小。 感觉还是增加一个变量好点,汇编上来说,效率也快(我只了解部分8位机的汇编) XCHG呢? 本帖最后由 jacky_yhy 于 2015-3-19 15:29 编辑
很难么?x=x+y;y=x-y;x=x-y.
当时面试的时候被问到过这个问题。感叹有什么奇葩的地方要这么搞。今天居然见到了 dawanpi 发表于 2015-3-19 15:26
XCHG呢?
交换函数吗?
前两天是在写迪文屏的OS程序中遇到的,这程序竟然要用类似汇编的语言写。 jacky_yhy 发表于 2015-3-19 15:27
很难么?x=x+y;y=x-y;x=x-y.
当时面试的时候被问到过这个问题。感叹有什么奇葩的地方要这么搞。今天居然见 ...
异或也行,你这个方法也蛮好的。。。。,谢! 另外我很好奇迪文的屏出到啥程度了?居然要这么操作?还是我原来用DGUS的方式太low了{:lol:} tyoo 发表于 2015-3-19 15:32
交换函数吗?
前两天是在写迪文屏的OS程序中遇到的,这程序竟然要用类似汇编的语言写。 ...
https://en.wikibooks.org/wiki/X86_Assembly/Data_Transfer#Data_swap 哎呀,表示没有思考过这个问题 jacky_yhy 发表于 2015-3-19 15:34
另外我很好奇迪文的屏出到啥程度了?居然要这么操作?还是我原来用DGUS的方式太low了 ...
也在用?
屏做主机访问从设备,MODBUS协议不写OS程序也能实现? 一个静态变量而已,何必啊 jswd0810 发表于 2015-3-19 15:09
为了省一个变量把自己搞死?
把简单的问题复杂化,看这逼装的。。。 我宁愿多用几个变量,也不把程序搞的自己都看不懂。 异或容易看懂还是赋值容易看懂?
异或运算快还是赋值运算快?
加减运算快还是赋值运算快?
多一个变量也就多临时占用一个寄存器而已,没必要给自己找麻烦。
程序优化的方向是速度快、代码量小、容易看懂,不管哪个方向来看都是多个变量更好些 同意楼上说法。。 tyoo 发表于 2015-3-19 16:18
也在用?
屏做主机访问从设备,MODBUS协议不写OS程序也能实现?
我直接用的它自带的设备协议{:lol:} liwei_jlu 发表于 2015-3-19 17:58
异或容易看懂还是赋值容易看懂?
异或运算快还是赋值运算快?
加减运算快还是赋值运算快?
同意~ 通俗易懂,方便日后维护~ jacky_yhy 发表于 2015-3-19 20:07
我直接用的它自带的设备协议
不用OS可以吗,我是在OS中调用RMODBUS命令实现 tyoo 发表于 2015-3-19 20:20
不用OS可以吗,我是在OS中调用RMODBUS命令实现
神马os?只要能用串口不就能匹配它的协议了吗 jacky_yhy 发表于 2015-3-19 15:27
很难么?x=x+y;y=x-y;x=x-y.
当时面试的时候被问到过这个问题。感叹有什么奇葩的地方要这么搞。今天居然见 ...
x+y有可能溢出 at90s 发表于 2015-3-19 21:05
x+y有可能溢出
溢出也没有关系的. jacky_yhy 发表于 2015-3-19 20:30
神马os?只要能用串口不就能匹配它的协议了吗
如图,1、2分别是两个软件,2完成界面布局,1完成数据的处理、界面控件控件及串口控制。1是需要用类似汇编格式的语言编写的,官网称之为OS程序。
---------------------
图片挂了重新上传 这个还是算了吧,没有几个公司会建议这么干得 tyoo 发表于 2015-3-20 06:22
如图,1、2分别是两个软件,2完成界面布局,1完成数据的处理、界面控件控件及串口控制。1是需要用类似汇 ...
可以不用os的。只用DGUS软件(内部可配置),用它自带的设备协议(非modbus)。 jacky_yhy 发表于 2015-3-20 07:35
可以不用os的。只用DGUS软件(内部可配置),用它自带的设备协议(非modbus)。 ...
这份手册中没找到相关内容。
请教一下,如何使用? tyoo 发表于 2015-3-20 09:05
这份手册中没找到相关内容。
请教一下,如何使用?
第十页2.3.4 自己看吧。实在不明白把它接个串口接电脑,你按屏幕上的按键你就明白了。
具体指令在13页 涨知识啊! jacky_yhy 发表于 2015-3-20 10:09
第十页2.3.4 自己看吧。实在不明白把它接个串口接电脑,你按屏幕上的按键你就明白了。
具体指令在13页 ...
兄弟,帮忙出份详细的教程,到目前还未看懂,2.3.4不是说上位机控制DGUS屏吗?我需要的是用屏来控制其它设备,协议由其它设备决定。 tyoo 发表于 2015-3-21 10:13
兄弟,帮忙出份详细的教程,到目前还未看懂,2.3.4不是说上位机控制DGUS屏吗?我需要的是用屏来控制其它 ...
。。。。。。。
自学吧。。。。
我当初也是一步一步自己过来的。 不错,学习了 知道即可,不建议使用。 非常感谢你的经验分享! 学习了,但是代码还是简单易懂的比较好维护吧 x ^= y ^= x ^= y; x=x+y y=x-y x= x-y lans0625 发表于 2015-3-19 15:10
x=x+y;
y=x-y;
x=x-y;
你这个明显不对啊!{:biggrin:} embeddev_1 发表于 2015-5-8 08:37
你这个明显不对啊!
你用x=5,y=6套进去试试再说。。。。 这个百度里有答案
关键知道是可行的人占不到50%,先不论值不值的省一个变量,但是方法和思路是可以学一学的 奇技淫巧~~~ 和孔乙己的“茴”有异曲同工之妙。哈哈 本帖最后由 byrin219 于 2015-5-12 15:45 编辑
lans0625 发表于 2015-3-19 15:10
x=x+y;
y=x-y;
x=x-y;
我都是这样用的,有什么问题呢?求指教,A=A+B;B=A-B;A=A-B
页:
[1]