java 异或 的 疑问

public class ToCharArrayDemo {

public static void main(String[] args) {
String str = "同一个世界同一个梦想";
char[] c = str.toCharArray();
for (int i = 0; i < c.length; i++) {
c[i] = (char) (c[i] ^ 'a');
}
System.out.println("密文: " + new String(c));
for (int i = 0; i < c.length; i++) {
c[i] = (char) (c[i] ^ 'a');
}
System.out.println("明文: " + new String(c));
}

}

上面的 c[i] = (char) (c[i] ^ 'a'); 是什么意思?

就是c[i]的二进制值异或'a'的二进制值
相同位变成0,不同位变成1.
温馨提示:内容为网友见解,仅供参考
第1个回答  2010-03-01
本人十分讨厌这种写法,不就是加密嘛,何必把代码也写的这么难以理解,随便换个办法也比这个好用。

java 异或 的 疑问
就是c[i]的二进制值异或'a'的二进制值 相同位变成0,不同位变成1.

Java异或运算总结
异或运算是基于二进制的位运算,以符号XOR或^表示。其规则是:若二进制位相同,则结果为0;若二进制位不同,则结果为1。简单理解为不进位加法,例如1+1=0,0+0=0,1+0=0。异或运算具有交换律和结合律,且任何数与0进行异或运算结果不变。其用途广泛,如加密、数据校验、位操作等。例一:在不...

JAVA按位异或运算问题
首先取反运算符优先级高于异或运算符 其次int是32位 28 = 0001 1100(前面16位不写了)8 = 0000 1000 -8 = 1111 1000 -28 = 1110 0100 所以a=28^-8 = 0001 1100 ^ 1111 1000 = 1110 0100 = -28 a=-28^8 = 1110 0100 ^ 0000 1000 = 1110 1100 = -20 是-20,不是20。楼主看...

java中异或是怎样算的
解析异或是一种基于二进制的位运算,用符号XOR或者^表示,其运算法则是对运算符两侧数的每一个进制位同值则取0,异值则取1.简单理解就是不进位加法,如1+1=0,0+0=0,1+0=1.For example:3^5 = 6 转成二进制后就是 0011 ^ 0101 二号位和三号位都是异值取1 末尾两个1同值取零,所...

java中两个数组异或的问题
你的需求是什么呢?两个数组异或,你是要找出数组a中的元素在b与之相同的元素?还是用异或来实现内容交换?如果只是判断是否元素内容的相同,遍历下数组就能比较。

异或运算公式
异或运算如下:可以A异或(A异或B)看作a^(a^b)=(a^a)^b,又因为a^a=0,原式可以简化成0^b=b。逻辑加法通常用符号“+”或“∨”来表示。逻辑加法运算规则如下:0+0=0,0∨0=0。0+1=1,0∨1=1。a=a^b;b=a^b;a=a^b;楼主试一下就明白了。问题二:java中异或是怎样算的...

java异或运算
不同之处:java:执行完第一个(i ^= j)的时候,最左边的i的值还是1而不会是(i ^= j)的值 C:执行完第一个(i ^= j)的时候,最左边(第一个)i的值是(i ^= j)你的程序改成这样就可以了:j ^= i ^= j;i ^= j;或 i =i^j;j=i^j;i=i^j;...

JAVA按位异或运算问题
首先取反运算符优先级高于异或运算符 其次int是32位 28=00011100(前面16位不写了)8=00001000 -8=11111000 -28=11100100 所以a=28^-8=00011100^11111000=11100100=-28 a=-28^8=11100100^00001000=11101100=-20 是-20,不是20。楼主看清楚了。

Java入门中,问题:对于两个int类型变量 int m=120,n=240; 那么,m^m和...
^异或运算符号,相同为0,不同为1。需要对数字转换成二进制数后进行按位运算。但是,出题人明显不是让你把120和240转换成二进制,你会哭的。异或有特点的:1.一个数和自己异或,那结果一定是0啊。因为每个位都一样。2.如果x^y=z 那么x^z=y y^z=x 所以第二题的答案是120 ...

JAVA中按位异或是什么意思? 不太理解,请指教,谢谢!
异或运算没有听过,不过位与运算就有,它的原理是:先把十进制(或N进制)转换成二进制,再分别同位进行与运算,比如:12&5(java中位与运算是用&符号表示的)即:12 = 11000 & 5 = 01001 --- = 11001 位异或运算或许是把它们进行异或吧。PS楼下不能这么说,有些算法还得用到这些位操...

相似回答
大家正在搜