您的位置:首页 > 编程语言 > Java开发

java中的移位运算

2011-12-12 15:38 323 查看
java中移位有:左移<<、右移>>(有符号右移和无符号右移)

1.左移

左移运算,在"<<"符号左边的操作数低位补0(移多少位就补多少个0),例:0x12 << 3,先将十六进制数0x12转换成二进制结果为"0001 0010"(十六进制中的一位对应二进制中的四位),在二进制的低位补三个"0",补"0"后的二进制为"0000 1001 0000",将其转换为十六进制结果为0x90,将十六进制转换成十进制结果为144.

/**

* 左移

*/

public static void testLeftMove(){

int u=0x12;

System.out.println("============二进制:"+Integer.toBinaryString(u));

for(int t=1;t<=3;t++){

int a=u <<=1;

System.out.println(Integer.toBinaryString(a));

System.out.println("=========="+a);

}

}

2.右移

右移运算,将">>"符号左边的操作数向右移动,移动的位数为">>"符号右边的操作数,如果是正数,在左边空位上补"0",如果为负数,则在左边的空位中补1,例:016 >> 3,将八进制数016转换成二进制结果为"001 110"(八进制的一位对应二进制中的三位),将其右移3位,低位"110"被移出,因为是正数,在高位中补三个“0“,结果为"000 001"转换成八进制结果为"1",其十进制的结果也为"1".

负数右移运算,例:-18 >> 2,十进制负数的二进制,就是该十进制数的补码,补码的计算是先将正数转换成二进制为"10010",将其取反后的结果为"01101",然后将取反后的值加1结果为"01110","01110"就是"-18"的二进制,将其右移两位,把低位"10"移出,在高位补1(负数补1)结果为"11011",将负数二进制转换成十进制,将"11011"减1结果为"11010",然后取反得到值为"00101","101"的十进制为5,因为符号位为1,所以结果为-5

/**

* 正数右移

*/

public static void testRightMove(){

int k=016;

System.out.println(Integer.toBinaryString(k));

//对K进行有符号位 右移运算

for(int t=1;t<=3;t++){

int a=k >>=1;

System.out.println(Integer.toBinaryString(a));

}

System.out.println("k的二进值为:"+Integer.toBinaryString(k)+" =======k的值为:"+k);

}

/**

* 负数右移

*/

public static void testRightMove(){

int k=-18;

System.out.println(Integer.toBinaryString(k));

//对K进行有符号位 右移运算

for(int t=1;t<=2;t++){

int a=k >>=1;

System.out.println(Integer.toBinaryString(a));

}

System.out.println("k的二进值为:"+Integer.toBinaryString(k)+" =======k的值为:"+k);

}

3.无符号右移

java中的无符号右移符号为">>>",无符号右移是不管是正数还是负数,都在高位补0,例:16 >>> 2,将16转换成二进制结果为"10000",右移两位将低位"00"移出后的值为"00100",转换成十进制结果为4.

/**

* 无符号右移

*/

public static void unsignRightMove(){

int u=16;

System.out.println("============二进制:"+Integer.toBinaryString(u));

for(int t=1;t<=2;t++){

int a=u >>>=1;

System.out.println(Integer.toBinaryString(a));

}

System.out.println("==============================u的二进制值 为:"+Integer.toBinaryString(u)+"==================u的值为:"+u);

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: