本帖最后由 任文龙 于 2015-7-8 22:55 编辑
位运算符中的<<和>>多少位被概括为乘以和除以2的多少次方,那么这个结论有没有限制呢?
1. 1<<31 int型数值左移,结果会是什么呢?
2. 1<<32 结果是不是1的结果再乘以2呢?
3. -8>>2 正数的最高位是0,右移是左侧空位补0,负数最高位是1,右移是在左侧空位补1,结果会怎样?- class Test
- {
- public static void main(String[] args) {
- System.out.println(1<<31);//结果为-2147483648
- System.out.println(1<<32);//结果为1
- System.out.println(-8>>2);//结果为-2
- }
- }
复制代码
下面是一点思考和疑问。
计算机中的数据运算以二进制补码形式进行。
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,并不会因为添加空位数值影响结果。
|
|