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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 晏文根 初级黑马   /  2012-6-11 14:40  /  1745 人查看  /  9 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

在学毕老师的java基础视频第二天中的位移运算符是。虽然明白了,老师讲的右移等概念。但后来发现老师举得例子,例如:
6>>2; 3>>1都是后面的数字比前面大,这我都明白了,但小弟不才,明白不了后者。就是加入后面的数大于前者该怎么办呀?
例如:求6>>8;     7>>12  ;  25>>36  ;    45>>55等
我进行了一些测试,但就是找不出其中的规律。

9 个回复

倒序浏览
本帖最后由 黄克帅 于 2012-6-11 14:59 编辑

左移几位 就乘以2的几次方,右移几位就除以2的几次方。
你举的几个例子,都移没了。结果都是0
回复 使用道具 举报
class  B
{
回复 使用道具 举报
class  B
{
public static void main(String[] args)
{
  //以下是验证代码;
  System.out.println(15>>1);
  System.out.println(15>>2);
  System.out.println(15>>3);
  System.out.println(15>>4);
  System.out.println(15>>5);
  System.out.println(15>>6);
  System.out.println(15>>7);
  System.out.println(15>>8);
  System.out.println(15>>9);
  System.out.println(15>>10);
  System.out.println(15>>20);
  System.out.println(15>>60);
}
}
/*
    0000 0000 0000 1111//15
    *000 0000 0000 0111//>>1
    -------------------------
       7
    0000 0000 0000 1111//15
    **00 0000 0000 0011//>>2
  ------------------------------
       3
    0000 0000 0000 1111//15
    ***0 0000 0000 0001//>>3
    --------------------------
       1
    0000 0000 0000 1111//15
    **** 0000 0000 0000//>>4
  -----------------------------
       0
以上是位运算的方法;*表示前面补的“0”
相信至于6>>8;     7>>12  ;  25>>36  ;    45>>55的答案你应该知道了吧;
全部是0;
*/

评分

参与人数 1技术分 +1 收起 理由
黄奕豪 + 1 赞一个!

查看全部评分

回复 使用道具 举报
首先吧它换成二进制数,以6>>8为例:0000000000000110,把所有的数字向右移动8位数,低位移出,高位的空位补符号位,就是0,所以结果是0,以此类推
回复 使用道具 举报
class  B
{
public static void main(String[] args)
{
  //以下是验证代码;
  System.out.println(15>>1);//7
  System.out.println(15>>2);//3
  System.out.println(15>>3);//1
  System.out.println(15>>4);//0
  System.out.println(15>>5);//0
  System.out.println(15>>6);//0
  System.out.println(15>>7); //0
  System.out.println(15>>8);//0
  System.out.println(15>>9);//0
  System.out.println(15>>10);//0
  System.out.println(15>>20);//0
  System.out.println(15>>60);//0
}
}
/*
    0000 0000 0000 1111//15
    *000 0000 0000 0111//>>1
    -------------------------
       7
    0000 0000 0000 1111//15
    **00 0000 0000 0011//>>2
  ------------------------------
       3
    0000 0000 0000 1111//15
    ***0 0000 0000 0001//>>3
    --------------------------
       1
    0000 0000 0000 1111//15
    **** 0000 0000 0000//>>4
  -----------------------------
       0
以上是位运算的方法;*表示前面补的“0”
相信至于6>>8;     7>>12  ;  25>>36  ;    45>>55的答案你应该知道了吧;
全部是0;
*/
回复 使用道具 举报
宋浩 中级黑马 2012-6-11 15:23:20
7#
左移和右移的意义:
在数字没有溢出的前提下,对于正数和负数,左移一位都相当于乘以2的1次方,左移n位就相当于乘以2的n次方。
右移一位相当于除2,右移n位相当于除以2的n次方。这里是取商哈,余数就不要了。

回复 使用道具 举报
李伟 中级黑马 2012-6-11 18:26:44
8#
邓杰 发表于 2012-6-11 15:05
class  B
{
public static void main(String[] args)

我试验了一下25>>36,结果是1啊,不是0
回复 使用道具 举报
邓杰 中级黑马 2012-6-11 19:02:22
9#
李伟 发表于 2012-6-11 18:26
我试验了一下25>>36,结果是1啊,不是0

刚才没有说详细 是这样的一个int型的数每移32位就会回来原值;36-4=4;实际上25移了4位。所以为1啊;你可以再验证一下;
回复 使用道具 举报
对,,你们是怎么验证的,,我怎么验证的结果都不一样,不是零呀
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马