今日は、左シフト ビット演算子 ( ) について学習していました<<
。私が理解しているように、左シフトビット演算子は、指定されたとおりにビットを左に移動します。また、シフトのために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?
*/
}
}