在java语言规范中,有这样一段话:
If the promoted type of the left-hand operand is int
, only the five lowest-order bits of the right-hand operand are used as the shift distance
就是说只有低的五位起作用。
二级JAVA有这样一道题目:
Byte A=-128
求:~a<<128
-128二进制是 ~(0000 0000 , 0000 0000 , 0000 0000 ,1000 0000) +1
即: 1111 1111 , 1111 1111, 1111 1111 , 1000 0000
经过~a运算之后,得到的结果已经是int类型:
0000 0000 , 0000 0000 , 0000 0000 ,0111 1111 即十进制127
左移128位,128的二进制是1000 0000,只取低五位,所以实际左移0
再来看个例子:
byte a=-128;
System.out.println(~a);
System.out.println(~a<<15);
//0000 0000 0011 1111 1000 0000 0000 0000
System.out.println(0x003F8000);
输出结果:
127
4161536
4161536<script type="text/javascript"> </script><script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"> </script>