public class Test1 
{
public static void main(String[] args)
{
  int i=1;
  int b=0;
  
  b=i<<35;
  System.out.println("i<<35"+b);
      
  b=i<<3;
      System.out.println("i<<3"+b);
      
      b=i<<8;
      System.out.println("i<<8"+b);
      
      b=i<<29;
      System.out.println("i<<29"+b);
    }
}
输出结果为
i<<358
i<<38
i<<8256
i<<29536870912

解决方案 »

  1.   

    <<core java>>(7th edition) p42 字条警告处的例子"例如,1<<35与1<<3或8是相同的." 我写了个验证程序,怎么输出结果不同? 
    ---------------------------
    System.out.println("i<<35 = "+b);
    System.out.println(" i<<3 = "+b);
    System.out.println("    8 = "+8);
    // 以上,等号右边都是 8
    System.out.println("i<<29 = "+b);
      

  2.   

    呵,LZ自己看错误了,像楼上那样加个等号看看
    i<<358   其实是i<<35=8
    i<<38    其实是i<<3=8
      

  3.   

    i << 35 与 i << (35 - 32) 即 i << 3 等效,结果都是 8
      

  4.   

    1 << 35 = 00000001 << 35 = 00000001 << (35-32) = 8
    1 << 3 =  00000001 << 3 = 00001000 = 8
      

  5.   

    编号:175859 发送者:cyeahpro 发送时间:2006-7-14 11:14:55 删除  回复 
    接受者:binny 重要性:重要性:1 非常不重要重要性:2 不重要重要性:3 一般重要性:4 重要重要性:5 非常重要 
    内容 麻烦问问:
    为什么1 << 35 = 1 << (35-32)

    这是位运算规定的吗? 
    --------------------------------------移位运算符将它们右侧的操作数模32简化为int类型右侧操作数, 模64简化为long类型右侧操作数。因而, 任何int x, x >>> 32都会导致不变的x值, 而不是你可能预计的零。
      

  6.   

    public class Test1
    {
    public static void main(String[] args)
    {
    int i=1;
    int b=0;b=i<<35;
    System.out.println("i<<35"+b);b=i<<3;
    System.out.println("i<<3="+b);b=i<<8;
    System.out.println("i<<8="+b);b=i<<29;
    System.out.println("i<<29="+b);
    }
    }清楚了。谢谢啦。原来是1<<35==1<<3==8的意思。我没跟大家开玩笑的。哪有凌晨5点不睡觉跑来这里跟大家开玩笑的。