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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 尹志鹏 中级黑马   /  2013-5-9 20:52  /  1134 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 尹志鹏 于 2013-5-10 08:53 编辑

我昨天才开始看毕老师的视频自学,新人第一次发帖,希望能解决疑惑。

移位运算符的规律为乘以或者除以2的移位数次方。用二进制方法来移位也是非常好懂的。
但是还是有一个问题困扰我于是自己编代码去实现。
当右边是负数时是否也具有这个特点呢?通过自己的代码查看到结果,知道区别于右边是正数。
疑问一:那右边是负数的时候是什么规律?
疑问二:右边是负数的时候又怎样用二进制去运算移位呢?
代码如下


  System.out.println(-10>>-2);//-1
  System.out.println(10>>-2);//0
  System.out.println(-10<<-2);//-2147483648
  System.out.println(10<<-2);//-2147483648
  System.out.println(-10>>>-2);//3
  System.out.println(10>>>-2);//0
  

  
  System.out.println(-10>>2);//-3
  System.out.println(10>>2);//2
  System.out.println(-10<<2);//-40
  System.out.println(10<<2);//40
  System.out.println(-10>>>2);//1073741821
  System.out.println(10>>>2);//2

评分

参与人数 1技术分 +1 收起 理由
HM汪磊 + 1

查看全部评分

8 个回复

倒序浏览
》运算符,如果高位时0,右移后的空位就补0,如果最高位是1,右移后的空位就补1
回复 使用道具 举报
逝者轨迹 发表于 2013-5-9 21:39
》运算符,如果高位时0,右移后的空位就补0,如果最高位是1,右移后的空位就补1 ...

无符号右移不管最高位,全部补0
回复 使用道具 举报
逝者轨迹 发表于 2013-5-9 21:39
》运算符,如果高位时0,右移后的空位就补0,如果最高位是1,右移后的空位就补1 ...

嗯这个是移位运算符的规则,但是我的疑问是比如8>>-2,-8>>-2,右边是负数时怎么弄,没有移-2位的说法,但是编译不报错,像前面六行代码我就不清楚很疑惑,总结不出来规律,后面六行毕老师都有总结,易懂!
回复 使用道具 举报
逝者轨迹 发表于 2013-5-9 21:39
无符号右移不管最高位,全部补0

而且前六行后后六行的区别就是右边多了负号,但是没有一个结果是一样的!
回复 使用道具 举报
怎么没见懂得人回复啊,还是这个问题很少用,没有引起大家的注意!那我就接着看视频去了!
回复 使用道具 举报
尹志鹏 发表于 2013-5-9 22:01
嗯这个是移位运算符的规则,但是我的疑问是比如8>>-2,-8>>-2,右边是负数时怎么弄,没有移-2位的说法, ...

负数右移一个负数位的结果为-1,正数右移一个负数位的结果为0.剩下几个就不知道是怎么个意思了。不过,移动一个负数位貌似没有什么意义吧
回复 使用道具 举报
逝者轨迹 发表于 2013-5-9 22:36
负数右移一个负数位的结果为-1,正数右移一个负数位的结果为0.剩下几个就不知道是怎么个意思了。不过,移 ...

我刚也试了,正数右移负数位为0,负数右移负数位为-1
回复 使用道具 举报
在技术交流模块弄懂了,左值是int型时,右值取二进制的低五位换算成十进制,这样保证了右值范围为0~32,也就是楼上的-2低五位为111110换算成十进制就是30,所以把楼上的-2变成30结果是一样的。左值是long型是,取右值低六位。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马