关于字符数组异或换位后数据类型的注意

来源:互联网 发布:联想手机截图软件 编辑:程序博客网 时间:2024/06/12 00:48

移位运算符适用数据类型有byte,short,插入,int,long。对低于int型的操作数,将先自动转换为int型然后再移位。对于int型整数移位a>>b,系统先将b对32取模,得到的结果才是真正移位的数据。例:a>>33和a>>1的效果是一样的。a>>32还是a原来的数字。对于long型的整数移位时,先对移位位数对64取模。

我遇到过的问题:

/*
将字符串变成数组
将数组反转
将数组变成字符串
*/
public static String Noname1(String s)
 {
  //字符串变数组
  char[] chs=s.toCharArray();
  //反转数组
  reverse(chs);
  //数组变字符串
  return new String(chs);
 }
private  static void reverse(char[]arr)
 {
  for(int start=0,end=arr.length-1;start<end;start++,end--)
  {
   swap(arr,start,end);
  }
 }
private static void swap(char[]arr,int x,int y)
 {
  arr[x]=arr[x]^arr[y];
  arr[y]=(arr[x]^arr[y];
  arr[x]=arr[x]^arr[y];
 }
}

本例本来最后的代码是想实现异或换位,但是编译出错,提示损失精度,需要:char,找到:int。  这里就是在异或运算中,char型自动提升为int型参与运算,最后结果成为了int型,然后结果在赋值给char型就出现损失精度的错误,需要通过强制转换才能顺利执行。改后的代码部分如下:

arr[x]=(char)(arr[x]^arr[y]);
arr[y]=(char)(arr[x]^arr[y]);
arr[x]=(char)(arr[x]^arr[y]);