challenge 2進数の記述

 コンピューターの原理は2進数だというのに、多くのプログラミング言語で8進数や16進数しか記述できないのは少し変だとは思いませんか?
 そこで、ソース中に2進数を定数として書く方法、またはその代替手段を考えてください。

ある程度の評価基準を示します(できるところまでで構いません)。
・2進数の表示方法は0と1
・桁数は可変長
・コンパイル等の後に最適化等によって定数に変換されることが見込まれる

Cで関数として実装したものを示しておきます。
1
2
3
4
5
int bin(int b1, int b2, int b3, int b4, int b5, int b6, int b7, int b8){
    return b1<<7 | b2 <<6 | b3<<5 | b4<<4 | b5<<3 | b6<<2 | b7<<1 | b8;
}

int byte = bin(0, 1, 1, 0, 1, 0, 0, 1);

Posted feedbacks - Ruby

リテラルで書けます。

1
p 0b01101001  #=> 105

最適化されませんがせっかくなので ruby1.9 で書いてみました。Enumerable によるメソッドチェイン部分だけが 1.9 必要部分です。

ruby 1.9.0 (2007-11-21 patchlevel 0) [i686-linux]

Ruby ではメソッド呼び出しのカッコを省略できるのですが、文字列リテラルを最初の引数に書く場合にはさらに空白も省略できます (1.8 でも)。

1
2
3
4
5
6
7
8
9
def b(str)
    str.reverse.each_char.with_index.inject(0) {|r,(s,i)|
        r |= s.to_i << i
    }
end

p b"01101001"
p  "01101001".to_i(2)
p  0b1101001

Index

Feed

Other

Link

Pathtraq

loading...