黑马程序员技术交流社区

标题: 求解? [打印本页]

作者: HM周一帆    时间: 2013-3-27 20:35
标题: 求解?
本帖最后由 HM周一帆 于 2013-3-28 19:58 编辑

System.out.println(1<<-1); 这个结果是-2147483648 这个和System.out.println(1<<31)结果一样 难道是32位处理机器一次处理32位有关  求深入解答
作者: 丁一    时间: 2013-3-27 20:56
应该可以肯定的是,java 和平台无关,

char byte short 在进行移位处理前,他们会被转换成int类型 ,而int 类型占4个字节 就是32位



作者: 贾振凯    时间: 2013-3-27 21:43
对于位移操作,虚拟机首先会让位移的位数进行取模运算,这里就是对32取模

你这个问题的关键点是位移的位数是-1,是个负数

这时候虚拟机会先让-1对32取模,得到-1,

然后再加上32,得到31,

所以前后结果就等同啦!
作者: 贾振凯    时间: 2013-3-27 21:46
补充一点:当位移数是负数的时候会对让这个数对32取模得到一个绝对值小于32的负数,
然后再加上32得到一个大于0的值,这个值才是真正要移动的位数




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