24

重複の可能性:
Javaで>>と>>>はどういう意味ですか?

いくつかのJavaコードで見慣れない記号に出くわしました。コードは正しくコンパイルおよび機能しますが、このコードで山かっこが正確に何をしているのか混乱しています。com.sun.java.help.search.BitBufferでコードを見つけました。その一部は、以下のとおりです。

public void append(int source, int kBits)
    {
        if (kBits < _avail)
        {
            _word = (_word << kBits) | source;
            _avail -= kBits;
        }
        else if (kBits > _avail)
        {
            int leftover = kBits - _avail;
            store((_word << _avail) | (source >>> leftover));
            _word = source;
            _avail = NBits - leftover;
        }
        else
        {
            store((_word << kBits) | source);
            _word = 0;
            _avail = NBits;
        }
    }

それらの神秘的な見た目のブラケットは何をしますか?ほぼc++の挿入/抽出のように見えますが、Javaにはそのようなものがないことを私は知っています。

また、グーグルで試してみましたが、どういうわけか、引用符で囲んでも山かっこが見えないようです。

4

3 に答える 3

41

これらはビット単位のビットシフト演算子であり、指定されているビット数をシフトすることによって動作します。これらの使用方法に関するチュートリアルは次のとおりです。

符号付き左シフト演算子「<<」はビットパターンを左にシフトします

符号付き右シフト演算子「>>」は、ビットパターンを右にシフトします。

符号なし右シフト演算子">>>"は、ゼロを左端の位置にシフトします

于 2012-11-14T21:10:19.113 に答える
6

ORACLEDOCから直接。

符号付き左シフト演算子「<<」はビットパターンを左にシフトし、符号付き右シフト演算子「>>」はビットパターンを右にシフトします。ビットパターンは左側のオペランドで指定され、シフトする位置の数は右側のオペランドで指定されます。符号なし右シフト演算子">>>"はゼロを左端の位置にシフトしますが、">>"の後の左端の位置は符号拡張に依存します。

于 2012-11-14T21:10:43.100 に答える
3

ビット単位のシフト。こちらの公式ドキュメントをご覧ください:http://docs.oracle.com/javase/tutorial/java/nutsandbolts/op3.html

于 2012-11-14T21:11:59.910 に答える