日期:2014-05-20  浏览次数:20763 次

关于java中位运算的问题,求教,为什么255<<32的结果就是255本身啊
以下是运算结果
255的二进制结果:11111111
(255<<8)=65280
(255<<8)的二进制结果=1111111100000000
(255<<16)=16711680
(255<<16)的二进制结果=111111110000000000000000
(255<<24)=-16777216
(255<<24)的二进制结果=11111111000000000000000000000000
(255<<32)=255
(255<<32)的二进制=结果11111111
(255<<40)=65280
(255<<40)的二进制结果=1111111100000000
为什么位左移超过32就重复了呢?
------解决方案--------------------
java的<<如果移动的位数超过了该类型的最大位数,那么编译器会对移动的位数取模。如对int型移动33位,实际上只移动了33%32=1位。