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

移位运算符适用数据类型有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]);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值