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
{
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
---------------------------
System.out.println("i<<35 = "+b);
System.out.println(" i<<3 = "+b);
System.out.println(" 8 = "+8);
// 以上,等号右边都是 8
System.out.println("i<<29 = "+b);
i<<358 其实是i<<35=8
i<<38 其实是i<<3=8
1 << 3 = 00000001 << 3 = 00001000 = 8
接受者:binny 重要性:重要性:1 非常不重要重要性:2 不重要重要性:3 一般重要性:4 重要重要性:5 非常重要
内容 麻烦问问:
为什么1 << 35 = 1 << (35-32)
?
这是位运算规定的吗?
--------------------------------------移位运算符将它们右侧的操作数模32简化为int类型右侧操作数, 模64简化为long类型右侧操作数。因而, 任何int x, x >>> 32都会导致不变的x值, 而不是你可能预计的零。
{
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点不睡觉跑来这里跟大家开玩笑的。