黑马程序员技术交流社区

标题: 左移、右移运算符的一点思考和疑问 [打印本页]

作者: 任文龙    时间: 2015-7-8 22:54
标题: 左移、右移运算符的一点思考和疑问
本帖最后由 任文龙 于 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,并不会因为添加空位数值影响结果。


作者: 我本灬无名    时间: 2015-7-8 23:15
加油吧·········




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2