192という10進数を2進数に変換することを考える。商が0になるまで2で割っていって、余りを逆順に並べる。
192 = 2 * 096 + 0 096 = 2 * 048 + 0 048 = 2 * 024 + 0 024 = 2 * 012 + 0 012 = 2 * 006 + 0 006 = 2 * 003 + 0 003 = 2 * 001 + 1 001 = 2 * 000 + 1 (192)_10 = (11000000)_2
忘れた時は、10で割っていって、余りを逆順に並べる。
192 = 10 * 019 + 2 019 = 10 * 001 + 9 001 = 10 * 000 + 1 (192)_10 = (192)_10
32bitで表したければ、頭(位の高い側)をゼロで埋める。右側が位の低い側であることが多いので左側埋めることが多い。
(0000000192)_10 = (00000000000000000000000011000000)_2
どっち側埋めるかわからなくなったら、10進数で0192と1920は全然違うことを思い出す。
Fという数のp進数への基数変換ってつまりこういうこと。
F_n = p * F_{n+1} + F_n mod p n = 0;
my $Fn = 192; my $p = 2; my $str = ''; do { $str = ($Fn % $p).$str; $Fn = int($Fn / $p); } while ($Fn == 0); print $str;
一行で書くと以下。
$ perl -le '$Fn=192; $p=2; $str=""; do{$str=($Fn%$p).$str; $Fn=int($Fn/$p);}while($Fn); print $str;' 11000000