黑马程序员技术交流社区
标题:
简单基础题,有点迷惑 求指教。
[打印本页]
作者:
杨华东
时间:
2012-10-7 20:03
标题:
简单基础题,有点迷惑 求指教。
本帖最后由 杨华东 于 2012-10-7 20:05 编辑
public class Test6 {
/*交换同类型数据的最高效率方式如下。
** */
public static void main(String[] args) {
int a = 0;
int b = 8;
a=a^b; //谁能给我说的透彻,给你申请技术分啊。
b=a^b;
a=a^b;
System.out.println(a+" "+b);
}
}
复制代码
作者:
李兆宁
时间:
2012-10-7 20:13
a^b^b = a
这个你懂吗?
作者:
黑马连家华
时间:
2012-10-7 20:15
首先这确实是最有效率的方式
因这使用的是位运算
^总结出来的特性是 一个数被另一个数异或两次,它的结果还是它本身( 我们可以利用这个 来写一个低级加密程序哦)
例如
3^2的结果为 1 (二进制 :11^10==1)
1再异或2结果为3 (二进制 :1^10 == 11)
也就是说
a^b^b==a
剩下的就不用解释了吧- -+
加分!
作者:
李兆宁
时间:
2012-10-7 20:18
a=a^b; //1式
b=a^b;//把a用上式右边代替,即是:b=a^b^b ,就是把最初的a赋给b
a=a^b;//把1式右边代替a,,b已经是最初的a值了,,,所以等价于用最初的值表示: a=a^b^a, 就是b值
作者:
胡高德
时间:
2012-10-7 20:18
public class Test6 {
/*交换同类型数据的最高效率方式如下。
** */
public static void main(String[] args) {
int a = 0;
int b = 8;
a=a^b;
//将a的值与b的值调换另一种方法就是利用逻辑运算符:^。规律:一个数亦或另一个数两次,结果还为那个数。注意:如果两个数非常大可能会超出int范围。
b=a^b;
//b=(a^b)^b
a=a^b;
//a=a^(a^b)
System.out.println(a+" "+b);
}
}
作者:
黑马连家华
时间:
2012-10-7 20:31
胡高德 发表于 2012-10-7 20:18
public class Test6 {
/*交换同类型数据的最高效率方式如下。
那个 不好意思 ,关于两个非常大的数异或是不会会超出int的范围的.
因为a和b都是int值,只要这两个值都是相同类型,那就不会超出范围
例如 a和b值都是int值的上限,那他们两个异或的值为0,再次异或a或者b它的值还是int的上限,永远不会超出
你说的那个是普通的算术运算符的交换吧?搞混了
作者:
打工人
时间:
2012-10-7 20:34
同意楼上
作者:
花裤头
时间:
2012-10-7 20:59
相同输出0,不同输出1,例如:
System.out.println(1^1); 输出0
System.out.println(1^2);输出3,因为最后2个低位都不一样,所有输出3 。
比如2^1=3,二进制就是:0010^0001=0011
如果两个数值异或后的值相同,异或前可能不同。
例如0^3=3,二进制就是:0000^0011=0011。
作者:
花裤头
时间:
2012-10-7 21:07
补充下:
a=a^b;
b=a^b; //b = (a^b)^b =a
a=a^b; // a = a^(a^b) = b
懂否?
作者:
杨华东
时间:
2012-10-7 21:20
问题已解决
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2