数据加载中……
移位运算符

Java中有3个移位运算符

左移: <<

带符号右移:>>

无符号右移:>>>

数 x x<<2 x>>2 x>>>2

17 00010001 01000100 00000100 00000100

-17 11101111 10111100 11111011 00111011

看一下程序0x表示16进制。ffffffff表示-1

public class test {

    public static void main(String[] args) {

        int i=0xffffffff;

        int c=i<<2;

        System.out.println(i);

        System.out.println(c);

        }

}

输出是-1和-4.这表示

public class test {

    public static void main(String[] args) {

        int i=0xffffffff;

        int c=i<<2;

        System.out.println(Integer.toHexString(i));

        System.out.println(Integer.toHexString(c));

        }

}

使用Integer.toHexString()将10进制转换位16进制。

输出位ffffffff 和fffffffc左移2位最后补2个0,最后的1100转换位16进制就是c

 

public class test {

    public static void main(String[] args) {

        int i=0xffffffff;

        int c=i>>>2;

        System.out.println(Integer.toHexString(i));

        System.out.println(Integer.toHexString(c));

        }

}

无符号右移输出是ffffffff和3fffffff 右移2位后最左段是0011,转换位16进制就是3

 

练习:

将一个整数110从右端开始的4到7位变为0.

答:要想将4到7位变为0,先构造一个4到7位是0的数,然后用110和这个数与&。任何数和0与都是0,就完成了任务。要构造一个4到7位是0的数,先构造一个低4位是1的数15,然后将它左移3位,然后取反,就构造成4到7位是0的数了。程序如下。

public class test {

    public static void main(String[] args) {

        int i=15;

        int j=i<<3;

        int c=~j;

        int k=110;

        int l=k&c;

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

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

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

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

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

        }

}

输出是

00001111

01111000

10000111

01101110

00000110

 

将一个数左移一位等于是将数*2,右移一位相当于将数/2。

左移2位相当与乘两次2,右移2位相当与除两次2.

posted on 2008-02-28 17:15 rick 阅读(507) 评论(2)  编辑  收藏

评论

# re: 移位运算符 2010-01-04 00:51 sisi

问个问题,最后那个无符号右移2位的结果10进制应该是63,可是为什么如果我用16进制显示是对的3fffffff,但是不用Integer.toHexString显示的就成了1073741823?前面左移和带符号右移用十进制显示-4和-1都没出现问题啊
  回复  更多评论    

# re: 移位运算符 2010-01-04 19:36 sisi

知道了,3fffffff是1073741823
  回复  更多评论    

只有注册用户登录后才能发表评论。


网站导航: