通过位运算实现数值交换 您所在的位置:网站首页 用java实现a与b的值交换 通过位运算实现数值交换

通过位运算实现数值交换

2024-07-16 01:46| 来源: 网络整理| 查看: 265

对于数值的交换操作,通常会采用第三个变量作为中间变量过渡的交换方式。

temp=a; a=b; b=temp;

使用这种方法,可以保证交换的准确性,但是由于会使用第三个变量,占用了额外的内存空间。

那么有没有办法不借助第三个变量实现两个数值的交换呢?可以通过数值相加寄存和位运算两种方式。

1、相加寄存:

可以将sum=a+b的值暂时寄存到a变量上,由于a=sum-b,所以可以将a值放置到b上,又由于b=sum-a,可以将b值移动至a,实现a,b的交换。

a=a+b; b=a-b; a=a=b;

通过这种方式可以再不引入新的变量的情况下实现交换,但是当a+b>INT_MAX时,此时会产生正溢出,导致最终结果错误。

2、位运算:

对于任一位向量a,有a^a=0,a^0=a,为了实现交换,可以推导出a=a^a^b,b=b^b^a。

b=a^b; a=a^b; b=a^b;

列一个表格来简单看一下为什么位运算可以实现数值交换。

初始值abb=a^baa^ba=a^ba^a^b=ba^bb=a^bba^b^b=a

利用异或的运算法则即可实现数值交换(此方法除了减少了中间变量的使用,对于性能提升并无卵用)。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有