1) 算术运算
// a=10;b=12;
// a=b-a; //a=2;b=12
// b=b-a; //a=2;b=10
// a=b+a; //a=10;b=10
// 它的原理是:把a、b看做数轴上的点,围绕两点间的距离来进行计算。
// 具体过程:
// 第一句“a=b-a”求出ab两点的距离,并且将其保存在a中;
// 第二句“b=b-a”求出a到原点的距离(b到原点的距离与ab两点距离之差),并且将其保存在b中;
// 第三句“a=b+a”求出b到原点的距离(a到原点距离与ab两点距离之和),并且将其保存在a中。
// 完成交换。
// 2) 异或运算
// 此算法能够实现是由异或运算的特点决定的,通过异或运算能够使数据中的某些位翻转,其他位不变。
// 这就意味着任意一个数与任意一个给定的值连续异或两次,值不变。
// 原理:一个数同另一数连续异或2次,可还原为自已
// 该算法利用二进制数(数在计算机就是以二进制的存储的<是补码>)按每一位求异或(两个相同时
为 0;一个是1,一个是0为1)的一个性质——对任意给定的一个二进制数来说,它与任意一个二进 制数,连续异或两次最终得到的还是它本身即有(a = a ^ b ^b)。
// 证明:因为异或运算是可结合的(满足结合律),且可交换的,所以任何情况一个数和另一个数连 续异或都可成 “a ^b ^ b”的形式
// 再由结合性 a^b^b = a^(b^b) = a^0 = a #
// 按照这个思想,再结合给出的注释,交换算法就很简单了。
int num1 =3;
int num2 =8;
num1 = num1 ^ num2 ; // -1-
num2 = num1 ^ num2 ; // -2-
num1 = num1 ^ num2 ; // -3-
System.out.println(num1 +","+num2);
/3)借助第三变量,
// 例子给你三只容量相同的杯子,一杯雪碧,一杯白酒,还有一只空杯子;现在想实现白酒和雪碧互换。算法原理很简单,不多说。
相关推荐
- **冒泡排序**:通过重复遍历要排序的列表,比较每对相邻项,并交换它们的位置。 - **插入排序**:通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。 - **选择排序**:从未...
- **冒泡排序**:通过重复遍历待排序数组,每次比较相邻两个元素并交换位置(如果前一个元素比后一个大)。 - **选择排序**:遍历整个数组找到最小值,然后将其放到数组的起始位置;重复这一过程直到排序完成。 - **...
- **冒泡排序**: 通过交换相邻元素的方式排序。 - **简单选择排序**: 从未排序部分选出最小元素放入已排序部分。 **7.3 快速排序** - **快速排序**: 分治策略,选取基准元素进行分区。 **7.4 堆排序** - **堆...
5. 选做:使用ARM汇编实现冒泡排序算法。 **预备知识:** 1. C语言基础。 2. ARM汇编语言基础知识。 3. 对混合编程有一定的了解。 **实验设备与工具:** - **硬件**:ARM嵌入式开发平台;PC机(建议配置为Pentium ...