通过位运算实现数值交换 | 您所在的位置:网站首页 › 用java实现a与b的值交换 › 通过位运算实现数值交换 |
对于数值的交换操作,通常会采用第三个变量作为中间变量过渡的交换方式。 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 实验室设备网 版权所有 |