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

若对char,byte或者short进行移位处理,那么在移位进行之前,它们会自动转换成一个int。为什么只有数值右端的低5位才有用?
若对char,byte或者short进行移位处理,那么在移位进行之前,它们会自动转换成一个int。为什么只有数值右端的低5位才有用.

 解释:

  class AAA {
 public static void main(String[] args){
 byte a=127;
  System.out.println(Integer.toBinaryString(a));
  System.out.println(a);
  a<<=2;
  System.out.println(Integer.toBinaryString(a));
  System.out.println(a);
  byte b=127;
  System.out.println(Integer.toBinaryString(b));
  System.out.println(b);
  System.out.println(Integer.toBinaryString(b<<2));
  System.out.println(b<<2);
 }

}

运行结果:

1111111
127
11111111111111111111111111111100
-4
1111111
127
111111100
508

解答一:a的执行过程 先将 byte型的数 127变成int型,左移2位得到 508,然后把508赋给byte型变量a时只是简单地折断(损失精度)得到-4。

为什么只有数值右端的低5位才有用.?请大家帮我解释这一句。


------解决方案--------------------
int类型是32位也就是2的5次幂
如果你移32位以上,那么原来的数的信息会全部丢失,这样也就没有什么意义了