鱼C论坛

 找回密码
 立即注册
查看: 4132|回复: 2

Java学习异或运算符问题

[复制链接]
发表于 2014-10-19 17:13:32 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

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

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

  1. package com.yy.study;

  2. import java.util.Scanner;

  3. public class _023_Example {
  4.         
  5.         public static void main(String[] args){
  6.                 Scanner scan = new Scanner(System.in);
  7.                 System.out.println("请输入一个英文字符串或解谜字符串");
  8.                 String password = scan.nextLine();
  9.                 char array[] = password.toCharArray();
  10.                 for(int i=0; i<array.length; i++){
  11.                         array[i] = (char)(array[i] ^ 20000);
  12.                 }
  13.                 System.out.println("加密或解谜结果如下:");
  14.                 System.out.println(new String(array));
  15.                 System.out.println("丑 = " + (int)'丑');
  16.                 System.out.println((char)20001);
  17.                
  18.         }

  19. //        100111000100000 = 20000
  20. //        000000000000001 = 1
  21. //        100111000100001 = 20001 = '両'  理论结果
  22. //        100111000010001 = 19985 = '丑'  实际结果


  23. }
复制代码

复制代码





想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2014-10-19 20:29:34 | 显示全部楼层
这位同学你搞错的异或运算了,因为这里是字符的1,它ASCII码是49,所以正确的结果应该是20000与49相异或 = 19985,而不是数字1和20000异或=20001,同理'2'、'3',都是一样结果是19986,19987,你可以把array改成数字结果一定和你想的一样



  1. import java.util.Scanner;

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

  21. //        100111000100000 = 20000
  22. //        000000000000001 = 1
  23. //        100111000100001 = 20001 = '両'  理论结果
  24. //        100111000010001 = 19985 = '丑'  实际结果


  25. }
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

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

哦,是的,明白了,谢谢~!:lol:
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-3-29 01:19

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表