黑马程序员技术交流社区
标题:
左移、右移运算符的一点思考和疑问
[打印本页]
作者:
任文龙
时间:
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,结果会怎样?
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
}
}
复制代码
QQ截图20150708225157.png
(26.29 KB, 下载次数: 6)
下载附件
2015-7-8 22:52 上传
下面是一点思考和疑问。
计算机中的数据运算以二进制补码形式进行。
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