package thb;public class ceshi1 {
public static void main(String[] args){
char a1='十',a2='点';
char secret='9';   //为什么secret只能取值是(0~9),大于9以后就报错???
a1=(char)(a1^secret);
a2=(char)(a2^secret);
System.out.println("密文:"+a1+a2);//为什么+a1+a2前面一定要有点东西呢???单独的用(+a1+a2)显示的是数字也不报错。
a1=(char)(a1^secret);
a2=(char)(a2^secret);
System.out.println("原文:"+a1+a2);
}}
本人菜鸟一个希望GGJJ给与解答,很是不理解。

解决方案 »

  1.   

    你的a1、a2是char当你注释的地方前面加上一个字符串的时候,编译器会把a1、a2转换为String,然后进行连接操作,但是当你前面没加字符串的时候,编译器就只会把a1、a2转换为int型数据进行相加然后输出
      

  2.   

    char   secret='9';       //为什么secret只能取值是(0~9),大于9以后就报错??? a1=(char)(a1^secret); 
    a2=(char)(a2^secret); 
    System.out.println("密文:"+a1+a2);//为什么2个代码相同这个显示的是加密的,下面那个是解密的呢
    a1=(char)(a1^secret); 
    a2=(char)(a2^secret); 
    System.out.println("原文:"+a1+a2); 
      

  3.   

    你的问题,楼上两位都回答得很清楚了,如果想要加密字符串的话,可以参考下面的代码。public class Test {    public static void main(String[] args) {
            String plainText = "walykyy(斌斌),walykyy(斌斌)";        
            // 加密
             String crypt = encrypt(plainText, 1233210);
            System.out.println(crypt);        
            // 解密
             String plain = encrypt(crypt, 1233210);
            System.out.println(plain);
        }
        
        private static String encrypt(String plain, int key) {
            char[] chars = plain.toCharArray();
            char[] crypt = new char[chars.length];
            for(int i = 0, k = chars.length; i < k; i++) {
                // 随便扰乱一下,为了让相同的字符,出现密文也不同
                key ^= key * key + i;
                  // 这里之所以要强转成char,是因为对于char来说,^计算出来的结果是int
                // int 的范围要大于char,所以就要强转(PS:char也是一个数值,对应着
                  // 一个字符的Unicode值。char占两个字节,从0~65535)。
                  crypt[i] = (char)(chars[i] ^ key);          
            }
            return new String(crypt);
        }
    }
      

  4.   

    为什么secret只能取值是(0~9),大于9以后就报错???______________________________________________char中只能放一个字符,如果要放两个或多个字符的话就要使用String,或者用char数组。=================== 分 = 隔 = 符 ===================为什么2个代码相同这个显示的是加密的,下面那个是解密的呢__________________________________________________这是由^(异或)决定的,异或运算是按二进制位来做的,即:相同的位异或为“0”,不同的位异或为“1”。它的特点,就是:1,某一个数值(a)与另一数值(b)异或的结果(c),c再与b进行异或最终得出的还是a,
      如果我们把b作为密钥,把a作为原文,这样就是加密了,如果没有b,那也就不能把密文给还原了;2,两个相同数,异或的结果为0。因为 (a^b)^b = a^(b^b),由于b^b=0,所以 a^(b^b) = a^0 = a不知道这样说你明白了吗?