当前位置: 代码迷 >> Java相关 >> JAVA中字符与字符异或的有关问题
  详细解决方案

JAVA中字符与字符异或的有关问题

热度:81   发布时间:2016-04-22 20:43:06.0
JAVA中字符与字符异或的问题
刚做一个数据结构第一单元的一个题目,是为了实现某个字符的全排列。在网上找了一些代码,然后运行正确,但是对里面字符和字符的异或问题不是很了解,代码如下,其中str[low] ^= str[i]后,str[low]的存放的字符不清楚是什么???

public class GetChar {

public void permute01(String str){
permute(str.toCharArray(),0,str.length()-1);
}

private void permute(char [] str, int low, int high){
if(low == high)System.out.println(str);
for(int i = low;i<=high;i++){
if(i > low)
{
str[low] ^= str[i];
str[i] ^= str[low];
str[low] ^= str[i];
}
  permute(str, low + 1, high);

if(i > low){
str[low] ^= str[i];
str[i] ^= str[low];
str[low] ^= str[i];
}
}
}

/**
 * @param args
 */
public static void main(String[] args) {
// TODO Auto-generated method stub

String str = "abc";

new GetChar().permute01(str);
}
}



------解决思路----------------------
str[low] ^= str[i];
str[i] ^= str[low];
str[low] ^= str[i];
只知道这样可以实现str[low] 和 str[i]的交换,楼主实在想知道值的话就在str[low] ^= str[i];后面打印str[low]的值吧
------解决思路----------------------

                str[low] ^= str[i];
                str[i] ^= str[low];
                str[low] ^= str[i];

相当于:

               char temp = str[low];
               str[low] = str[i];
               str[i] = temp;

 这个就是字符交换。
假设某个循环时 str[low] = 'a', str[i] = 'b', ‘a’的整数形式是97,二进制形式是01100001,‘b’的整数形式是98,二进制形式是01100010.
1     执行str[low] ^= str[i]; 相当于 str[low] = str[low] ^str[i] ,即 str[low] = 01100001 ^ 01100010 = 00000011. 这是个临时值。
2     执行str[i] ^= str[low]; 相当于 str[i] = str[i] ^ str[low], 即 str[i] = 01100010 ^ 00000011 = 01100001. 这句相当于把'a' 赋值给了str[i].
3    执行 str[low] ^= str[i]; 相当于 str[low] = str[low] ^ str[i] 即 str[low] = 00000011 ^ 01100001 = 01100010, 这句就是把 'b' 赋值给了str[low] .
就完成了字符交换。
------解决思路----------------------
引用:

                str[low] ^= str[i];
                str[i] ^= str[low];
                str[low] ^= str[i];

相当于:

               char temp = str[low];
               str[low] = str[i];
               str[i] = temp;

 这个就是字符交换。
假设某个循环时 str[low] = 'a', str[i] = 'b', ‘a’的整数形式是97,二进制形式是01100001,‘b’的整数形式是98,二进制形式是01100010.
1     执行str[low] ^= str[i]; 相当于 str[low] = str[low] ^str[i] ,即 str[low] = 01100001 ^ 01100010 = 00000011. 这是个临时值。
2     执行str[i] ^= str[low]; 相当于 str[i] = str[i] ^ str[low], 即 str[i] = 01100010 ^ 00000011 = 01100001. 这句相当于把'a' 赋值给了str[i].
3    执行 str[low] ^= str[i]; 相当于 str[low] = str[low] ^ str[i] 即 str[low] = 00000011 ^ 01100001 = 01100010, 这句就是把 'b' 赋值给了str[low] .
就完成了字符交换。

正解哦,棒!
  相关解决方案