YanoRyuichi.com/
Wiki
Blog
GitHub
Sandbox
開始行:
* ビット演算 [#k75accc0]
** 左にシフト [#e0004c88]
say 3<<1; # 6
say 3<<2; # 12
say 3<<3; # 24
1ビット、左にシフトすると、数は2倍になる。
** 右にシフト [#qff8dff6]
say 24>>1; # 12
say 24>>2; # 6
say 24>>3; # 3
say 24>>4; # 1
say 3 / 2; # 1.5
1ビット、右にシフトすると、数は半分になる。
** あるビット列について、特定のビットだけ取り出す [#jb5ac...
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
- 特定のビットは1<<nで表せる。これをビットマスクと呼ぶ。
- あるビット列について、ビットマスクと論理積(&)を取ると...
- 上の例では、あるビット列(11001/25)の3番目(一番下の桁...
** あるビット列について、特定のビットをセットする [#k9d40...
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
- あるビット列について、ビットマスクと論理和(|)を取ると...
- 上の例では、あるビット列(11001/25)の2番目のビットをセ...
** あるビット列について、特定のビットをクリアする [#r0714...
my $num = 25;
my $pos = 3;
my $bit_mask = 1<<$pos;
printf "%b\n", $num; # 11001
printf "%b\n", ~$bit_mask; # 11111111111111111111111...
say $num & ~$bit_mask; # 17
say 25 & ~(1<<3); # 17
printf "%b\n", (25 & ~(1<<3)); # 10001
- あるビット列について、論理否定(~)したビットマスクと論...
- 上の例では、あるビット列(11001/25)の3番目のビットをク...
** n進数を10進数に変換 [#q7a4efd0]
say oct("011"); # 8進数→10進数 「9」
say oct("0xA1"); # 16進数→10進数 「161」
say oct("0b101"); # 2進数→10進数 「5」
say oct("11"); # 8進数→10進数 「9」
終了行:
* ビット演算 [#k75accc0]
** 左にシフト [#e0004c88]
say 3<<1; # 6
say 3<<2; # 12
say 3<<3; # 24
1ビット、左にシフトすると、数は2倍になる。
** 右にシフト [#qff8dff6]
say 24>>1; # 12
say 24>>2; # 6
say 24>>3; # 3
say 24>>4; # 1
say 3 / 2; # 1.5
1ビット、右にシフトすると、数は半分になる。
** あるビット列について、特定のビットだけ取り出す [#jb5ac...
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
- 特定のビットは1<<nで表せる。これをビットマスクと呼ぶ。
- あるビット列について、ビットマスクと論理積(&)を取ると...
- 上の例では、あるビット列(11001/25)の3番目(一番下の桁...
** あるビット列について、特定のビットをセットする [#k9d40...
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
- あるビット列について、ビットマスクと論理和(|)を取ると...
- 上の例では、あるビット列(11001/25)の2番目のビットをセ...
** あるビット列について、特定のビットをクリアする [#r0714...
my $num = 25;
my $pos = 3;
my $bit_mask = 1<<$pos;
printf "%b\n", $num; # 11001
printf "%b\n", ~$bit_mask; # 11111111111111111111111...
say $num & ~$bit_mask; # 17
say 25 & ~(1<<3); # 17
printf "%b\n", (25 & ~(1<<3)); # 10001
- あるビット列について、論理否定(~)したビットマスクと論...
- 上の例では、あるビット列(11001/25)の3番目のビットをク...
** n進数を10進数に変換 [#q7a4efd0]
say oct("011"); # 8進数→10進数 「9」
say oct("0xA1"); # 16進数→10進数 「161」
say oct("0b101"); # 2進数→10進数 「5」
say oct("11"); # 8進数→10進数 「9」
ページ名: