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; }
こんなんでいいのかなっと。
moremagic
2014-02-19