18.4.10進数を2進数に変換する

普通にJavaのInteger.toBinaryString()を使えばいいけど、桁数をじったりしたい時や、論理演算した結果を2進数で得たい、という場合もある。 ということで以下のようにすればいい感じで2進数を得られます

// 渡された10進数を指定したdigitSize桁の2進数に変換して返す。
// もしdigitSizeに満たない場合は0埋め。
def toBinStr = { Integer b, Integer digitSize = 4 -> 
    def binString = Integer.toBinaryString(b)
    def length = binString.length()
    String padding = (digitSize - length) > 0  ?  "0" * (digitSize - length) : ""
    (padding + binString)[-1..-digitSize].reverse()
}

Byte l1 = 4 as Byte // つまり0x04
Byte l2 = 6 as Byte // つまり0x06

assert toBinStr( l1 ) == '0100'
assert toBinStr( l2 ) == '0110'
assert toBinStr( l1|l2 ) == '0110' // OR 論理和
assert toBinStr( l1&l2 ) == '0100' // AND 論理積
assert toBinStr( l1^l2 ) == '0010'  // XOR 排他的論理和
assert toBinStr( ~(l1|l2) ) == '1001'  // NOT OR 論理和の否定(否定なので先頭が1埋めに成る)
assert toBinStr( ~(l1&l2) ) == '1011'  // NOT AND 論理積の否定(否定なので先頭が1埋めに成る)
assert toBinStr( ~(l1^l2) ) == '1101'  // NOT XOR 排他的論理和の否定(否定なので先頭が1埋めに成る)
assert toBinStr( 25 as Byte ) == '1001' // デフォルトだと4桁目までしか表示しない
assert toBinStr( 25 as Byte, 6 ) == '011001' // 桁を指定して表示