java で NTZ と NLZ

ビット演算が苦手なのです。

ビットを数えろって言われたら String に直してから IndexOf で数えたくなります。
でもそれだと速度が遅い上にダサいですよね。。。
せっかくなのでビット演算でやってみたいところ。

以下のサイトを参考に int型の 最下位ビット(NLZ) と 最上位ビット(NLZ) を
検索するコードを書いてみました。
参考;http://www.nminoru.jp/~nminoru/programming/bitcount.htm

    /**
     * NLZ 最上位ビットを探す 左から数える
     */
    public static int countNlz(int x) {
        int buf = x;

        int cnt = 33;
        while(buf != 0){
            cnt--;
            buf = buf >>> 1;
        }
        
        System.out.println(String.format("%32s", Integer.toBinaryString(x)).replaceAll(" ", "0") + " -> " + cnt );
        return cnt;
    }

    /**
     * NTZ 最下位ビットを探す 右から数える
     */
    public static int countNtz(int x) {
        int buf = x & (-x);
        int cnt = 0;
        while (buf != 0) {
            cnt++;
            buf = buf >>> 1;
        }
        System.out.println(String.format("%32s", Integer.toBinaryString(x)).replaceAll(" ", "0") + " -> " + cnt);
        return cnt;
    }

こんなんでいいのかなっと。