Java が<<<
(符号なし左シフト) 演算子をサポートしないのに、>>>
(符号なし右シフト) 演算子をサポートするのはなぜですか?
4 に答える
Java は演算子 ">>>" を追加して論理的な右シフトを実行しますが、論理的な左シフト操作と算術的な左シフト操作は同じであるため、Java には "<<<" 演算子はありません。
Javaのシフトから...
Java が
<<<
(符号なし左シフト) 演算子をサポートしないのに、>>>
(符号なし右シフト) 演算子をサポートするのはなぜですか?
(仮想の) 符号なしの左シフト演算子は、既存の左シフト演算子とまったく同じことを行うためです。
(ヒント: 2 進整数を 2 倍すると、左に 1 シフトし、整数表現が符号付きか符号なしかに関係なく、右端のビットを 0 にする必要があります。紙にいくつかの例を書き、自分でテストしてください。)
Java が <<< (符号なし左シフト) 演算子をサポートしないのに、>>> (符号なし右シフト) 演算子をサポートするのはなぜですか?
これは、ビットを左にシフトすると、左端のビット (AKA SIGNED ビット) がとにかく失われるためです。
符号なしの左シフト演算子は、既存の左シフト演算子とまったく同じことを行うため、それはありません。
これは設計ミスだと思います。<< は算術シフトではありません。<< する場合は 2 を乗算することになっています
0xF0FFFFFF << 4
正の数を返します!負の数の乗算 2 が正の数になることはありません。<< は <<< 作業を行っています。