日期:2014-05-20  浏览次数:20802 次

关于java异或运算符的,始终不懂,求解释,谢谢。
public class Example023 {

/**
 * @param args
 */
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner sc=new Scanner(System.in);
//创建一个输入流扫描器。
System.out.println("请输入一个英文字符串或解密字符串");
String password=sc.nextLine();
//获取用户输入。
char[] array=password.toCharArray();
//将用户输入转换成字符数组。
for(int i=0;i<array.length;i++)
{
array[i]=(char) (array[i]^100000);
//进行异或运算。这个异或运算始终不懂,求详细的通俗易懂的解释。
}
        System.out.println("加密或解密结果如下:");
        System.err.println(new String(array));
}

}


array[i]=(char) (array[i]^100000);
//进行异或运算。这个异或运算始终不懂,求详细的通俗易懂的解释。
}
Java

------解决方案--------------------
引用:
public class Example023 {

/**
 * @param args
 */
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner sc=new Scanner(System.in);
//创建一个输入流扫描器。
System.out.println("请输入一个英文字符串或解密字符串");
String password=sc.nextLine();
//获取用户输入。
char[] array=password.toCharArray();
//将用户输入转换成字符数组。
for(int i=0;i<array.length;i++)
{
array[i]=(char) (array[i]^100000);
//进行异或运算。这个异或运算始终不懂,求详细的通俗易懂的解释。
}
        System.out.println("加密或解密结果如下:");
        System.err.println(new String(array));
}

}


array[i]=(char) (array[i]^100000);
//进行异或运算。这个异或运算始终不懂,求详细的通俗易懂的解释。
}


首先明白的是异或是针对二进制位来说的
相同输出0,不同输出1
举个简单的例子
       1   ^   1
00000..1
00000..1
输出0000....0 ,结果为0
       2 ^ 1
00000..10
00000..01
输出00000..11,结果为3
------解决方案--------------------
对于 ^ 是这样的,先将两边的字符或数字之类的转换为二进制,当它们的二进制一致时,就会输出0,否则会将这两个二进制相加再转换为相应的字符或数字输出
------解决方案--------------------
先转换为二进制 然后位数相同为0 不同为1

作为加密来用的话 很重要的一个点 就是 一个数 ^ 两次同一个数 还是原来的数字
例如 3^5^5  的结果为3!!!