sironekotoroの日記

Perl で楽をしたい

Perlトレーニングブック Part 04

Perlトレーニングブック Part 04

  • なんか、ビット演算のあたりがよくわからん・・・
use strict;
use warnings;
use Data::Dumper;

my $c = ord('A');
my ( $i, $ret );

printf( "%c(%d:%x)\n", $c, $c, $c );

for ( my $i = 7; $i >= 0; $i-- ) {
    $ret = $c & ( 1 << $i );
    printf( "%d", $ret ? 1 : 0 );
}
print "\n";
  • 論理積をとりながら、1ビットずつ左シフトしていき、条件演算子で判断して0/1表示・・・うーん、なんか合わない感じ。
    • printf( "%d", $ret ? 1 : 0 )
    • print分のところで条件演算し使っているけど、つまりこれはif文。
    • コードは短いけど、なんか・・・よっしゃ!自分で書き直したるわ!!
my $num = 7;
my @array;

for ( my $i = 3; $i >= 0; $i-- ) {
    my $ret = $num & ( 1 << $i ); # 1を$i分左シフトしたものと
                                    # $numの論理積(&)をとる
                                    # 1/0が$retに入る

    if($ret == 0){
        push @array , 0;
    }else{
        push @array , 1;
    }

}
  • 思った以上に短くならなかったなぁ。ビット計算むずかしい。
  • と思ってたけど、思い出してきたわ!情報処理試験でやった!
    • この本の想定している読者って割とハイレベルなんだろうか・・・