java的算术右移(>>)、算术左移(<<)及逻辑右移(>>>,无符号移位)

来源:互联网 发布:员工监控软件 编辑:程序博客网 时间:2024/06/04 18:04

首先说明一点,本文所有的操作都是针对存储在计算机中中二进制的操作,正数在计算机中是用二进制表示的,负数在计算机中使用补码表示的。

算术左移(<<):有符号的移位操作;该操作时将运算数的二进制码整体左移指定位数(<<符号左侧为运算数,右侧为移动位数),左移之后右侧的空位用0补充。

算术右移(>>):有符号的移位操作;该操作时将运算数的二进制码整体右移指定位数(>>符号左侧为运算数,右侧为移动位数),右移之后左侧的空位正数用0补充(可省略),负数用1补充。

逻辑右移(>>>,无符号移位):无符号的移位操作;该操作时将运算数的二进制码整体左移指定位数(>>>符号左侧为运算数,右侧为移动位数),右移之后左侧的空位用0补充。


下面附上测试代码:

public class ShiftTest {    public static void main (String args[]){        ShiftTest st=new ShiftTest();        st.ShiftTest();    }    public void ShiftTest(){        System.out.println("*****************算术左移(<<)****************");        int lnum1=54321;        System.out.println("移位前:lnum1= "+lnum1+"  二进制为:"+Integer.toBinaryString(lnum1));        lnum1=lnum1<<11;        System.out.println("移位后:lnum1= "+lnum1+"  二进制为: "+Integer.toBinaryString(lnum1));        int lnum2=-54321;        System.out.println("移位前:lnum2= "+lnum2+"  二进制为:"+Integer.toBinaryString(lnum2));        lnum2=lnum2<<11;        System.out.println("移位后:lnum2= "+lnum2+"  二进制为: "+Integer.toBinaryString(lnum2));        System.out.println("*********************************************");        System.out.println("\n");        System.out.println("*****************算术右移(>>)****************");        int num=54321;        System.out.println("移位前:num= "+num+"  二进制为:"+Integer.toBinaryString(num));        num=num>>11;        System.out.println("移位后:num= "+num+"  二进制为: "+Integer.toBinaryString(num));        int num1=-54321;        System.out.println("移位前:num1= "+num1+"  二进制为:"+Integer.toBinaryString(num1));        num1=num1>>11;        System.out.println("移位后:num1= "+num1+"  二进制为: "+Integer.toBinaryString(num1));        System.out.println("*********************************************");        System.out.println("\n");        System.out.println("*****************逻辑右移(>>>)*****************");        int v1=54321;        System.out.println("移位前:v1= "+v1+"  二进制为:"+Integer.toBinaryString(v1));        v1=v1 >>> 11;        System.out.println("移位后:v1= "+v1+"  二进制为:"+Integer.toBinaryString(v1));        int v2=-54321;        System.out.println("移位前:v2= "+v2+"  二进制为:"+Integer.toBinaryString(v2));        v2=v2 >>> 11;        System.out.println("移位后:v2= "+v2+"  二进制为:"+Integer.toBinaryString(v2));        System.out.println("************************************************");    }}


控制台输出结果如下:

*****************算术左移(<<)****************移位前:lnum1= 54321       二进制为:1101010000110001移位后:lnum1= 111249408   二进制为:110101000011000100000000000移位前:lnum2= -54321      二进制为:11111111111111110010101111001111移位后:lnum2= -111249408  二进制为:11111001010111100111100000000000**************************************************************算术右移(>>)****************移位前:num= 54321    二进制为:1101010000110001移位后:num= 26       二进制为:11010移位前:num1= -54321  二进制为:11111111111111110010101111001111移位后:num1= -27     二进制为:11111111111111111111111111100101**************************************************************逻辑右移(>>>)*****************移位前:v1= 54321    二进制为:1101010000110001移位后:v1= 26       二进制为:11010移位前:v2= -54321   二进制为:11111111111111110010101111001111移位后:v2= 2097125  二进制为:111111111111111100101************************************************


0 0
原创粉丝点击