System.out.println(Integer.toBinaryString(2+24)); // 11010
これはInteger.toBinaryString
メソッドを使用します。toHexString
、、、toOctalString
およびtoString
可変基数のaもあります。
文字列を特定の幅にゼロで埋める必要がある場合は、次のような単純なものを書くことができます。
static String binaryPadded(int n, int width) {
String s = Integer.toBinaryString(n);
return "00000000000000000000000000000000"
.substring(0, width - s.length()) + s;
}
//...
System.out.println(binaryPadded(2+24, 8)); // 00011010
文字列を固定幅にゼロパディングする方法はいくつかありますが、これはどのint
値でも機能します。
16進数または8進数の場合は、代わりに書式設定文字列を使用できます。
System.out.println(String.format("%04X", 255)); // 00FF
仕様はあまり明確ではありませんが、次のマッピングが必要なようです。
0 -> 1
1 -> 2
2 -> 4
3 -> 8
4 -> 16
:
i -> 2
私
その場合、マッピングはfromからi
toになります(1 << i)
(これ<<
はビット単位の左シフト演算子です)。
System.out.println(
(1 << 2) + (1 << 4)
); // 20
何をしようとしているのかによっては、java.util.BitSet
代わりに使用することも検討できることに注意してください。
BitSet
デモンストレーション
これは完全にオフザマークかもしれませんが、ある種の区間演算を実行していると仮定BitSet
すると、データ構造になる可能性があります(ideone.comも参照)。
import java.util.BitSet;
//...
static String interval(BitSet bs) {
int i = bs.nextSetBit(0);
int j = bs.nextClearBit(i);
return String.format("%02d:00-%02d:00", i, j);
}
public static void main(String[] args) {
BitSet workTime = new BitSet();
workTime.set(9, 17);
System.out.println(interval(workTime));
// 09:00-17:00
BitSet stackOverflowTime = new BitSet();
stackOverflowTime.set(10, 20);
System.out.println(interval(stackOverflowTime));
// 10:00-20:00
BitSet busyTime = new BitSet();
busyTime.or(workTime);
busyTime.or(stackOverflowTime);
System.out.println(interval(busyTime));
// 09:00-20:00
}
のようなメソッドを使用するnextSetBit
とnextClearBit
、空の/占有されているタイムスロットを簡単に見つけることができます。intersect
、、、or
なども実行できますand
。
この単純な例では、最初の間隔のみが検出されますが、これをより高度にし、連続していない時間間隔でさまざまな演算を実行できます。