今天我正在学习左移位运算符(<<
)。据我了解,左移位运算符按指定向左移动位。而且我也知道乘以 2 进行移位。但我很困惑,就像“移位位”的确切含义是什么,为什么当值被分配不同的类型时输出会有所不同?
当我调用下面的函数时,它的输出为System.out.println("b="+b); //Output: 0
我的问题是: b 如何变成 0 以及为什么 b 被类型转换?
public void leftshiftDemo()
{
byte a=64,b;
int i;
i=a << 2;
b=(byte)(a<<2);
System.out.println("i="+i); //Output: 256 i.e 64*2^2
System.out.println("b="+b); //Output: 0 how & why b is typecasted
}
更新(新疑问):
这是什么意思“如果将 1 位移到高位(位 31 或 63),则该值将变为负数”。例如。
public void leftshifHighOrder()
{
int i;
int num=0xFFFFFFE;
for(i=0;i<4;i++)
{
num=num<<1;
System.out.println(num);
/*
* Output:
* 536870908
* 1073741816
* 2147483632
* -32 //how this is -ve?
*/
}
}