0

このコードがどのように機能するかはよくわかりません:

public static boolean isUniqueChar2(String str) {
    int checker = 0;

    for (int i = 0; i < str.length(); ++i) {
        int val = str.charAt(i) - 'a';
        System.out.println(str.charAt(i) );
        System.out.println(val);
        if ((checker & (1 << val)) > 0)
            return false;
        checker |= (1 << val);
    }
    return true;
}

特に特定の >> 演算子とチェッカーの役割がわかりません

4

2 に答える 2

4

このメソッドは、小文字に対してのみ機能するように設計されているようです。checker変数は、すべて0の sに初期化された 32 ビットのビットマップです。コード1 << valは 1 を取り、それを の位置にシフトしますval。これは、アルファベットの文字 (a=0、b=1、c=2 など) を表します。 if ((checker & (1 << val)) > 0)が返さfalseれるのは、0 以外の値は文字が繰り返されたことを示すためです。ループの最後の行は、次の反復の前のchecker |= (1 << val);位置にビットを設定します。val

于 2012-12-21T00:02:15.150 に答える
0

と | ビットごとのシフトとバイナリ or です。二項演算子とビット演算子を読むことをお勧めします: http://en.wikipedia.org/wiki/Bitwise_operation

a |= b は a = a | の略記です。b a += b と a = a + b のように似ている

于 2012-12-20T23:55:37.753 に答える