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