:
my @bits = reverse unpack '(a)*', unpack 'B*', pack 'J>', $int;
없이 :
my @bits = reverse unpack '(a)*', sprintf '%b', $int;
주 :
reverse
은 $bits[0]
에서 최하위 비트를 배치하는 데 사용됩니다.
unpack '(a)*'
은 문자열을 개별 비트로 분리하는 데 사용됩니다.
- 둘 다 부호있는 정수와 부호없는 정수로 작동합니다.
- 둘 다
perl -V:ivsize
에 의해 주어진 크기 (바이트)의 정수로 작동합니다. 당신이 문자열로두면
, 당신은 제로의 시퀀스를 추출하는 정규식 엔진을 활용할 수 있습니다.
C에서
use List::Util qw(max);
my $bin = sprintf '%b', $num;
my $longest = (max map length, $bin =~ /1(0+)(?=1)/g) || 0;
, 당신은 다음과 같은 일을 할 수도 있지만, Perl로, 그것은 이전 솔루션에 비해 덜 효율적이 될 수 있습니다
my $longest = 0;
if ($num) {
# Cast to unsigned so that >> inserts zeroes even for neg nums.
$num = ~~$num;
# Skip zeros not between 1s.
$num >>= 1 while !($num & 1);
while (1) {
# Skip 1s.
$num >>= 1 while $num & 1;
last if !$num;
# Count 0s.
my $len = 0; ++$len, $num >>= 1 while !($num & 1);
$longest = $len if $longest < $len;
}
}
무엇 1001000''는 어떻습니까? 2 또는 3? – ikegami