猴子请来的救兵 发表于 2014-10-19 17:13:32

Java学习异或运算符问题

本帖最后由 猴子请来的救兵 于 2014-10-19 17:23 编辑

在《Java开发实战1200例1卷》第23个例子中,出现异或。
其中第13行代码array = (char)(array ^ 20000);
我输入的是123,所以array = 1
然后1 ^ 20000 = 20001,应该输出的是“両”字
但是输出的却是“丑”这个字
       100111000100000 = 20000
       000000000000001 = 1
       100111000100001 = 20001 = '両' 理论输出      
       100111000010001 = 19985 = '丑'   实际输出
为啥理论输入和实际输出不对啊,不理解啊,求大神指教

package com.yy.study;

import java.util.Scanner;

public class _023_Example {
      
      public static void main(String[] args){
                Scanner scan = new Scanner(System.in);
                System.out.println("请输入一个英文字符串或解谜字符串");
                String password = scan.nextLine();
                char array[] = password.toCharArray();
                for(int i=0; i<array.length; i++){
                        array = (char)(array ^ 20000);
                }
                System.out.println("加密或解谜结果如下:");
                System.out.println(new String(array));
                System.out.println("丑 = " + (int)'丑');
                System.out.println((char)20001);
               
      }

//      100111000100000 = 20000
//      000000000000001 = 1
//      100111000100001 = 20001 = '両'理论结果
//      100111000010001 = 19985 = '丑'实际结果


}







百日维新 发表于 2014-10-19 20:29:34

这位同学你搞错的异或运算了,因为这里是字符的1,它ASCII码是49,所以正确的结果应该是20000与49相异或 = 19985,而不是数字1和20000异或=20001,同理'2'、'3',都是一样结果是19986,19987,你可以把array改成数字结果一定和你想的一样



import java.util.Scanner;

public class Example {
      
      public static void main(String[] args){
                Scanner scan = new Scanner(System.in);
                System.out.println("请输入一个英文字符串或解谜字符串");
                String password = scan.nextLine();
                char array[] = password.toCharArray();
                for(int i=0; i<array.length; i++){
                        array = (char)(array ^ 20000);
                        //这是的异或运算你想错了,因为这里是字符的1,它ASCII码是49,所以正确的结果应该是20000与49相异或 = 19985
                        //而不是数字1和20000异或=20001
                        //同理'2'、'3',都是一样结果是19986,19987
                }
                System.out.println("加密或解谜结果如下:");
                System.out.println(new String(array));
                System.out.println("丑 = " + (int)'丑');
                System.out.println((char)20001);
               
      }

//      100111000100000 = 20000
//      000000000000001 = 1
//      100111000100001 = 20001 = '両'理论结果
//      100111000010001 = 19985 = '丑'实际结果


}

猴子请来的救兵 发表于 2014-10-22 10:09:35

百日维新 发表于 2014-10-19 20:29
这位同学你搞错的异或运算了,因为这里是字符的1,它ASCII码是49,所以正确的结果应该是20000与49相异或 = ...

哦,是的,明白了,谢谢~!:lol:
页: [1]
查看完整版本: Java学习异或运算符问题