This topic has been archived. It cannot be replied.
-
工作学习 / 专业技术讨论 / 以前看到有高手写的swap两个整数, 不用附加内存, 的小程序, 找不着了. 能不能再来一个? 温故而知新
-simali(随笔);
2006-7-18
(#3086539@0)
-
这年头内存值几个钱?更何况是几个byte?
-hahaha_ly(咳....);
2006-7-18
(#3086552@0)
-
a=a+b;b=a-b;a=a-b;
-zhx(zhx);
2006-7-18
(#3086559@0)
-
given int x and y, to swap, x = x ^ y; y = x ^ y; x = x ^ y;
-ice(梦里不知身是客);
2006-7-18
(#3086685@0)
-
半路出家的吧? 如果用汇编来写, 你就知道加法和阶乘耗费的资源有多么天壤之别了.
-001isbetter(001-is-better);
2006-7-18
(#3086867@0)
-
同学,那个是XOR.
-canadiantire(轮胎-cui bono?);
2006-7-18
(#3086882@0)
-
you are funny, dude.
-ice(梦里不知身是客);
2006-7-18
(#3086961@0)
-
哈哈哈哈,what a BD
-cigarette(香烟);
2006-7-20
(#3092249@0)
-
Geez... LOL...
-jeffrey815(Smartiecat);
2006-7-20
(#3092260@0)
-
这种强贴,一定要留名。
-johnnyhatesjazz(Rock and Roll);
2006-7-20
(#3092273@0)
-
hehe, 新警察
-redriver(redriver);
2006-7-20
(#3092726@0)
-
怪不得人说国移同事难处。
-z24(LP的Durango);
2006-7-21
(#3093535@0)
-
this has nothing with Chinese immigrant ...
-redriver(redriver);
2006-7-21
(#3093570@0)
-
计算机组成不及格吧?
-skywriting(天书);
2006-7-21
(#3093573@0)
-
x ^= y ^= x ^= y;
-aluke(一个路客);
2006-7-20
(#3092248@0)
-
据我理解,上面所有的解决方案都用到内存变量(隐含)。
a=a+b ==> 隐含变量=a+b, a=隐含变量
大家不要扁我,好多c教课书都这么说的
-interview(intervieweree);
2006-7-21
(#3093195@0)
-
书上说得不完全对。举个例子:
int a, b;
a=b=1;
a=a+b;b=a-b;a=a-b;
GCC生成的汇编:
movl $1, -8(%ebp)
movl $1, -4(%ebp)
movl -8(%ebp), %edx
leal -4(%ebp), %eax
addl %edx, (%eax)
movl -8(%ebp), %edx
movl -4(%ebp), %eax
subl %edx, %eax
movl %eax, -8(%ebp)
movl -8(%ebp), %edx
leal -4(%ebp), %eax
subl %edx, (%eax)
没有用到额外的变量. -?(%ebp)
-canadiantire(轮胎-cui bono?);
2006-7-21
{336}
(#3093199@0)
-
优化了吗?movl $1, -8(%ebp)
movl $1, -4(%ebp)
movl -8(%ebp), %edx
leal -4(%ebp), %eax
addl %edx, (%eax)
movl -8(%ebp), %edx ;这一行完全在做无用功.
movl -4(%ebp), %eax
subl %edx, %eax
movl %eax, -8(%ebp)
movl -8(%ebp), %edx
leal -4(%ebp), %eax
subl %edx, (%eax)
-iwantcar(流浪的EnjoyStudying);
2006-7-21
{263}
(#3093344@0)
-
知道优化的结果么?估计你没看过gcc的优化。你试试-O3是什么效果。
-canadiantire(轮胎-cui bono?);
2006-7-21
(#3093362@0)
-
不想试,4 5 年前就做过了.
-iwantcar(流浪的EnjoyStudying);
2006-7-21
(#3093483@0)
-
做过你还问这种蠢问题
-canadiantire(轮胎-cui bono?);
2006-7-21
(#3093490@0)
-
你再想想,我说什么啦?
-iwantcar(流浪的EnjoyStudying);
2006-7-21
(#3093507@0)
-
请懂汇编得出来讲讲c=a
a=b
b=c
如果优化后,相当于
mov cx, ax
mov ax, bx
mov bx, cx
a=a+b
b=a-b
a=a-b
等于
add ax, bx
懒的写了,至少也要3个操作。。。
肯定比move 慢
大家批评,汇编马马地的说。。。。。
-interview(intervieweree);
2006-7-21
{203}
(#3093202@0)
-
你白写了.
-iwantcar(流浪的EnjoyStudying);
2006-7-21
(#3093329@0)
-
加法有溢出问题,别用.
-iwantcar(流浪的EnjoyStudying);
2006-7-21
(#3093331@0)
-
你最好先试试。即使溢出并不影响结果。
-canadiantire(轮胎-cui bono?);
2006-7-21
(#3093374@0)
-
遇到这种问题我一般不采用试的方法,其实花一两个小时,我可以证明,但是值得吗?XOR的方法这么清晰.
-iwantcar(流浪的EnjoyStudying);
2006-7-21
(#3093500@0)
-
先说什么处理器,有的处理器可以一条指令直接交换寄存器值。
-z24(LP的Durango);
2006-7-21
(#3093528@0)
-
一条指令不说明问题,关键要看多少指令周期。
-skywriting(天书);
2006-7-21
(#3093555@0)
-
看看罢了,那是灰常坏的编程习惯.
-wind_cloud(风逝云栖);
2006-7-25
(#3101423@0)