网上看了一些使用异或交换两数,不是很好理解.现在写一下自己的理解. 首先是 异或原则,对于任意 x: x ^ x == 0; x ^ 0 == x; 思路: 根据原则,可以得到两个公式: 求a: a^b^a=b 求b: a^b^b=a 交换两个数: 定义两个数:a b a = a ^ b; // 保存 a ^ b 的结果 b = a ^ b; --> a ^ b ^ b = a // 根据公式发现,这一步求的是a,只是用b接收了 a = a ^ b;
C语言中要实现交换两个数的值,可以有很多种方法,具体如下所述. 不使用中间变量: // 异或, a^=b^=a^=b; a ^= b; b ^= a; a ^= b; // 加减 a = a + b; b = a - b; a = a - b; // 乘除 a = a * b; b = a / b; b = a/ b; 使用中间变量: // 需临时空间 temp = a; a = b; b = temp; 正如你所想的那样,上面所示代码只是描述了交换两个数的值的思想,在你实际使用时,还有诸多地方
异或(exclusive OR)作为4种逻辑操作符之一,相对其他3种(OR/AND/NOT)来说,出场的次数非常少,是因为在日常开发中能用到它的场景本来就不多.对笔者来说,目前接触到场景只有交换两个数值时才会用到. Java Code: int a = 5; int b = 95; System.out.println(a + ", " + b); a ^= b;//等价于 a = a ^ b; b ^= a; a ^= b; System.out.println(a + "
#include<stdio.h> int main() { //交换两个数的值 // 方法一 可读性最好 ; ; int temp ; temp = a; a = b; b = temp; printf("a = %d, b = %d\n",a, b); //方法二 ; ; c = d - c; d = d - c; c = d + c; printf("c = %d, d = %d\n",c, d); // 方法三 ; ; e = e ^ f; f
反射是很强大的,谁说的final修饰的就不能改变, 通过反射获取成员变量,之后可以取消访问修饰符,也就是说private的也可以访问, 在修改常量(final修饰的),之后就可以对其做任何操作了 如下,通过一个方法交换两个Integer对象的值: package ni.jun.yang.test; import java.lang.reflect.Field; import java.lang.reflect.Modifier; public class Test { public static
在学习.Net/C#或者任何一门面向对象语言的初期,大家都写过交换两个变量值,通常是通过临时变量来实现.本篇使用多种方式实现两个变量值的交换. 假设int x =1; int y = 2;现在交换两个变量的值. 使用临时变量实现 static void Main(string[] args) { int x = 1; int y = 2; Console.WriteLine("x={0},y={1}",x, y); int temp = x; x = y; y = temp; Cons