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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 邝雄伟 中级黑马   /  2013-1-11 00:55  /  2267 人查看  /  11 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

运行以下程序得到什么打印结果:
System.out.println(1>>>1);
System.out.println(-1>>31);
System.out.println(2>>1);
System.out.println(1<<1);

毕老师的基础视频好像没有涉及这个知识点,求分析一下,具体点

11 个回复

倒序浏览
做沙发{:soso_e160:}瞅瞅
回复 使用道具 举报
怎么会没有呢,这个在位运算操作中就涉及到了,左移<< 右移>>   注意>>和>>>的区别,前一个右移以后左边的空位是又原来数值的符号位决定,原来是正就补0,是负就补1,后面一个右移是无论左边第一位是0还是1,移动后都是补0
回复 使用道具 举报
System.out.println(1>>>1);打印结果为0
System.out.println(-1>>31);打印结果为-1
System.out.println(2>>1);打印结果为1
System.out.println(1<<1);打印结果为1
在教程第02天-06-进制转换(负数二进制)由提到 请注意查看。
回复 使用道具 举报
典型运用的位运算操作了,实际上是计算机硬件内存条里的数据以二进制形式来运算,常常用到系统软件 ,例如windows 开机过程 ,嵌入式设备驱动程序,例如,对某个端口
寄存器中指定位进行位一级的处理,不过这针对于c的位运算,若采用java的话,只能通过JNI技术来时,调用本地c/c++动态库来实现,但这可能破坏了java跨平台的特性,尽量不要用,LZ有兴趣的话,可以OO我,最好直接去问 谷歌大神或百度 大娘 {:soso_e144:}
我这里有口诀,记得大学了老师教滴,哈哈,现在还有点影响,这里给群里黑马们透露透露
清零取法要用&,某位置一可用|
若要取反和交换,轻轻松松用^
右移“>>” ,右边的位被挤掉,对于左边空出的位,若是正数请补0,反之请补1
左移“<<” ,左边的位数被挤掉,对于右边的的位,若是正式请补1,反之请补0
特殊的运算符“>>>” 左边移动的位一律补上0
还要注意位运算的优先级~的优先级最高,其次是<<、>>和>>>,再次是&,然后是^,优先级最低的是|
这里我做个位运算的案例:
典型的物品的属性绑定,是否操作,传入限制的类型等 代码如下

/**
@version 1.0
@auther jonn
*/
public class produ
{
  /*  限制类型 :A, 不可交易;B,不可销毁;C,不可销售 ;D,不可使用虚拟币消耗 ; E, 物品锁定*/
    public static final int A=1,B=2,C=3,D=4,E=5;

  int value;

  /* 判断是否使用传入限制类型,若返回true则不能进行此类操作*/
  public boolean check(int type) {
    return (this.value&type)!=0;
   }

/* 添加绑定值*/
public void addValue(int value) {
  this.value|=value;
}

/*取消绑定值*/
public vode removeValue(int value){
this.value^=value;
  }
好累哦,白天学习,天天啃视频,晚上疯high论坛了,群里有撒疑问了给我留言,若有错误,还望l论坛里批正.....很晚了,就此搁笔了,休息去了....



评分

参与人数 1技术分 +1 收起 理由
金鑫 + 1

查看全部评分

回复 使用道具 举报
{:soso_e179:}
回复 使用道具 举报
高境 金牌黑马 2013-1-11 09:18:56
7#
赵文 发表于 2013-1-11 03:27
典型运用的位运算操作了,实际上是计算机硬件内存条里的数据以二进制形式来运算,常常用到系统软件 ,例如w ...

谢啦~~分享那么多
回复 使用道具 举报
高境 金牌黑马 2013-1-11 09:19:14
8#
曹佳佳 发表于 2013-1-11 09:07

{:3_59:}{:3_50:}
回复 使用道具 举报
这个是位运算,你在去看看教程,教程上有的,很详细
回复 使用道具 举报
虽然已经解决  但是我想纠正下有位楼主的错误这个System.out.println(1<<1);打印的结果是2
回复 使用道具 举报
本帖最后由 黄金龙 于 2013-1-16 17:11 编辑
  1. class Demo12
  2. {
  3. public static void main(String[] args)
  4. {
  5. System.out.println(1>>>1);
  6. System.out.println(-1>>31);
  7. System.out.println(2>>1);
  8. System.out.println(1<<1);
  9. }
  10. }
复制代码
(1>>>1);
0000-0000 0000-0000 0000-0000 0000-0001 二进制1
  000-0000 0000-0000 0000-0000 0000-0000 无符号右移1位. >>>是无符号位移.前面移动的补0
0000-0000 0000-0000 0000-0000 0000-0000 所以是0
(-1>>31);
1111-1111-1111-1111-1111-1111 1111-1111 二进制-1
0000-0000 0000-0000 0000-0000 0000-0001 带符号右移了31位  由于是带符号的右移因为是负数前面就要补1
1111-1111-1111-1111-1111-1111 1111-1111 所以是-1
(2>>1);
0000-0000 0000-0000 0000-0000 0000-0010   二进制2
  000-0000 0000-0000 0000-0000 0000-0001 带符号右移可1位 由于是带符号的右移因为是正数前面就要补0
0000-0000 0000-0000 0000-0000 0000-0001 所以就是1
(1<<1);
0000-0000 0000-0000 0000-0000 0000-0001 二进制1
000-0000 0000-0000 0000-0000 0000-0001   带符号左移可1位 后面补0
0000-0000 0000-0000 0000-0000 0000-0010 所以就是2



yiwei.jpg (1.51 KB, 下载次数: 48)

yiwei.jpg
回复 使用道具 举报
这个涉及到位移运算
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马