ビット演算左にシフトsay 3<<1; # 6 say 3<<2; # 12 say 3<<3; # 24 1ビット、左にシフトすると、数は2倍になる。 右にシフトsay 24>>1; # 12 say 24>>2; # 6 say 24>>3; # 3 say 24>>4; # 1 say 3 / 2; # 1.5 1ビット、右にシフトすると、数は半分になる。 あるビット列について、特定のビットだけ取り出すmy $num = 25; my $pos = 3; my $bit_mask = 1<<$pos; printf "%b\n", $num; # 11001 printf "%b\n", $bit_mask; # 1000 say $num & $bit_mask; # 8 say 25 & (1<<3); # 8
あるビット列について、特定のビットをセットするmy $num = 25; my $pos = 2; my $bit_mask = 1<<$pos; printf "%b\n", $num; # 11001 printf "%b\n", $bit_mask; # 100 say $num | $bit_mask; # 29 say 25 | (1<<2); # 29 printf "%b\n", (25 | (1<<2)); # 11101
あるビット列について、特定のビットをクリアするmy $num = 25; my $pos = 3; my $bit_mask = 1<<$pos; printf "%b\n", $num; # 11001 printf "%b\n", ~$bit_mask; # 11111111111111111111111111110111 say $num & ~$bit_mask; # 17 say 25 & ~(1<<3); # 17 printf "%b\n", (25 & ~(1<<3)); # 10001
n進数を10進数に変換say oct("011"); # 8進数→10進数 「9」 say oct("0xA1"); # 16進数→10進数 「161」 say oct("0b101"); # 2進数→10進数 「5」 say oct("11"); # 8進数→10進数 「9」 |
|