交换两个整形变量的方法

问题1: 交换两个整形变量
int a=10,b=20; A和B为常量
使用临时变量的方法就省略了
方法1:数值变化
a=A*a+B*b;b=(a-B*b)/A;a=(a-A*b)/B;
由此衍生出来常见的:
1.1: a=a+b; b=a-b; a=a-b;
1.2: a=a+b-(b-a);//利用算数表达式从左到右结合
1.3: a=b-a; b=b-a; a=b+a;
方法2:位异或
a^=b; b^=a; a^=b; //无数值操作,速度快
方法3:交换地址
变量的地址=基地址(16位)+位置偏移量(16位)
因此实际位置偏移量=地址&0x0000ffff
同时要考虑
1.地址不能为负数,否则系统会自动将其变成补码形式
2.系统会自动给地址加上基地址。

      int *a,*b;
   a=new int(10);
   b=new int(20);
   if(a<b)
   {
       a=(int*)(b-a);//系统自动给a加上基地址。
       b=(int*)(b-(int(a)&0x0000ffff));
       a=(int*)(b+(int(a)&0x0000ffff));
   }
else
 {
    b=(int*)(a-b);
    a=(int*)(a-(int(b)&0x0000ffff));
    b=(int*)(a+(int(b)&0x0000ffff));
}
一般来说  几种方法的速度:方法2>方法3>方法1
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值