如:我们要交换a和b的值,我们会采用第三个变量c
现在我们不采用第三个变量c,如何可以交换a,b的值
现在我们不采用第三个变量c,如何可以交换a,b的值
解决方案 »
- DBgrid只能一个单元一个单元进行处理,能否进行多个单元一起复制之类的操作!
- 请问 怎样才能 用esc/pos 指令打印图形
- 有没有这种可能:光盘放到机器里,如果机器安装了delphi则可以运行,反之则不行?
- 一元2次方程的根的问题
- 太简单了!!
- 如何使一个窗口总是在最上面(不是fsstayontop)
- ?请问在delphi中怎样能以最快的速度找到所需控件?
- 我创建了一个tline类(从tgraphicsControl继承),我想在line上画一个箭头。
- 已知角A的度数求出x和y的坐标?- (画圆弧)?
- 有哪位大虾能提供万年历的算法,也就是阳历转阴历!
- 按F8调试的问题。
- 请问如何获取外部程序的一个文本输入框和一个按钮的句柄,窗体句柄已经获得!
b:=a-b
a:=a-b
这种方式只能用来交换integer型的,如果是其它类型的呢?比如一个指针型或者说更复杂的类型,如记录型!
[Error] Unit1.pas(32): Left side cannot be assigned to
b:=a-b
a:=a-b
~~~~~~~~~~~~~~~~~~
a:=b+a;
b:=a-b;
a:=a-b;这个方法对于单片机这类的惜内存如金的很重要,因为从前的单片机很多只有256字节的RAM,还有大部分是在寄存器里面直接运算,
对于目前的大内存没太大意义了。对于类型没必要深究。
b:=a xor b;
a:=a xor b;
b:=a-b;
a:=a-b;
对于不是整型的数据,强制转化一下就行了,交换完再转化回去。——对于浮点型当然不能用Integer(...)和Int64(...),要用PInteger和PInt64指向它们。
scanf("%d,%d,&a,&b); //再将a跟b的值调换,然后再输入
//哈哈^_^
b:=a-b;
a:=a-b;add eax, ebx
mov ecx, eax
sub ecx, ebx
mov ebx, ecx
sub eax, ebx位操作的a:=a xor b;
b:=a xor b;
a:=a xor b;xor eax, ebx
mov ecx, eax
xor ecx, ebx
mov ebx, ecx
xor eax, ebx始终还是必须多用一个寄存器ecx如果用第三个变量,也多用一个寄存器或者内存字,但是产生的代码就比这些技巧产生的代码简单
a:=10;b:=20;
a:=a xor b;
b:=a xor b;
a:=a xor b;
于是就a=20,b=10了:)第三个方法:利用加减法的性质,a:=a+b;b:=a-b;b=a-b;和前面的xor做法有异曲同工之妙。但是缺点就是可能导致溢出
代码通常是固化的、外置的EPROM(有些CPU也提供了内置EPROM),长点无所谓,但是对RAM就格外珍惜了。
前面你写的是x86汇编,有些不同。
有些机器具有这样的指令
add rd, rn, operand2
算是明白了,我老是以为所有机器的指令都只能有两个操作数谢了
C:
numberxor( int * a,b)
{
*a:=*a~*b;
*b:=*b~*a;
*a:=*a~*b;
}
// ~ 表示 异活
我倒! 时间长了 c语言都忘了哦delphi
procedure(var a,b:integer);
begin
a:=a xor b;
b:=b xor a;
a:=a xor b;
end;