黑马程序员技术交流社区
标题:
求解?
[打印本页]
作者:
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