A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 刘凯1213 于 2015-9-22 22:57 编辑

首先,移位运算符有三种,其操作类型只支持:byte / short / char / int和long五种。

<< 左移运算符,表示将左边的操作数的二进制数据向左移动*位,移动后空缺位以0填充,多余位舍弃。(等同于乘2的n次方)

>> 右移运算符,二进制数据向右移动*位,就在其二进制数据后抹掉几位?(这里还不错定,但个人理解是这样的)(等同于除2的n次方)

>>> 无符号右移运算符,不管移动前最高位是0还是1,右移后左侧产生的空位部分都以0来填充。

下面我们借一个demo帮助理解:


public static void main(String[] args){        int a = 16;        int b = a << 2;//左移2,等同于16 * 2的2次方,也就是16 * 4  
      int c = a >> 2;//右移2,等同于16 / 2的2次方,也就是16 / 4   
             System.out.println("a的二进制数据为:" + Integer.toBinaryString(a));
       System.out.println("a左移后二进制数据为:" + Integer.toBinaryString(b));   
     System.out.println("a右移后二进制数据为:" + Integer.toBinaryString(c));   
             System.out.println("a左移后的值为:" + b);  
      System.out.println("a右移后的值为:" + c);   
}
}



首先,16的二进制数据为:10000;
左移两位,10000变成1000000;
右移两位,10000变成100;
把得到的二进制数据转换成普通数据后,
a左移后的值为64,既16 * 2的2次方(16 * 4)。
a右移后的值为4,既16 / 2的2次方(16 / 4)。
看完这个demo再理解移位运算符是不是就简单很多?







0 个回复

您需要登录后才可以回帖 登录 | 加入黑马