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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 任文龙 于 2015-7-8 22:55 编辑

位运算符中的<<和>>多少位被概括为乘以和除以2的多少次方,那么这个结论有没有限制呢?
1.        1<<31        int型数值左移,结果会是什么呢?
2.        1<<32        结果是不是1的结果再乘以2呢?
3.        -8>>2        正数的最高位是0,右移是左侧空位补0,负数最高位是1,右移是在左侧空位补1,结果会怎样?
  1. class Test
  2. {
  3.         public static void main(String[] args) {
  4.                 System.out.println(1<<31);//结果为-2147483648
  5.                 System.out.println(1<<32);//结果为1
  6.                 System.out.println(-8>>2);//结果为-2
  7.         }
  8. }
复制代码





下面是一点思考和疑问。
计算机中的数据运算以二进制补码形式进行。
1.        1<<31        由于int型变量为32位,1的二进制补码表现形式为前面31个0、最后1个1。左移31位,1到最高位,结果为1后面31个0。该结果为某个负数的
补码表现形式,求出对应原码为-2^31,即-2147483648。
2.        1<<32        推导同1,应该32位数字全为0,为什么会是1呢?求大神解答
3.        -8>>2        推理过程略去,注意一点就是运算以二进制补码形式进行,所以负数的左侧空位补1,对应原码位置是0,并不会因为添加空位数值影响结果。

1 个回复

倒序浏览
加油吧·········
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马