若对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位才有用.?请大家帮我解释这一句。

解决方案 »

  1.   

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

  2.   

    数值右端的低5位才有用,这句话怎么理解,这个数值是int的吗?能编一段代码来解释一下吗?
      

  3.   

    现在明白了,数值右端我理解错了,其是移位操作符右端的那个数值的低5位才有用,即
    X<<y;
    是指y的低5位才有用,即不能大于32。
    class AAA { 
     public static void main(String[] args){ 
     int a=140; 
      System.out.println(Integer.toBinaryString(a)); 
      System.out.println(a); 
      System.out.println(Integer.toBinaryString(a<<34)); 
      System.out.println(a<<34); 
     } }
    运行结果:
    10001100
    140
    1000110000
    560
      

  4.   


    谢谢  我也被 《think in java》的这段给弄晕了