
byte b1[] = 羡唯str1.getBytes()
byte b2[] = str2.getBytes()
byte longbytes[],shortbytes[]
if(b1.length>=b2.length){
longbytes = b1
shortbytes = b2
}else{
longbytes = b2
shortbytes = b1
}
byte xorstr[] = new byte[longbytes.length]
int i 猛派闷= 0
for ( i < shortbytes.length i++) {
xorstr[i] = 枝弯(byte)(shortbytes[i]^longbytes[i])
}
for (i<longbytes.lengthi++){
xorstr[i] = longbytes[i]
}
return new String(xorstr)
}
异或运算(^)都以二进制数据为基础进行的猛枣指运算。也就是说当代码中使用到异或运算枝配时,都会先将两个条件进行转换,转换成二进制数据后,再进行运算。异域中同位如果值相同(都是0或者都是1)则为0,不同(一个是0,一个岩禅是1)为1。例如
int a=4
int b=6
int c = a^b//c的值是a和b的异或。值为2.
过程
1、a的值二进制是
0000 0100 //这里去低8位,因为高位都一致。
2、b的值二进制是
0000 0110
3、异或后
0000 0010 //结果是2
java和c的档旁执行是不一致的相同之处行碰橡:i ^= (j ^= (i ^= j))java和C都是这个执行顺序;
不同之处:
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
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)