ビットシフト

明解C言語 入門編 > 7. 基本型 >

ビットシフト

PHP
<?php
function count_bits($x)
{
    $count = 0;
    while ($x)
    {
        if ($x & 1) $count++;
        $x = ($x >> 1) & ~(~0 << (PHP_INT_SIZE * 8) - 1);
    }
    return $count;
}

function int_bits()
{
return count_bits(~0);

    return count_bits(~0);
}

function print_bits($x)
{
    for ($i = int_bits() - 1; $i >= 0; $i--)
    {
        print ((($x >> $i) & 1) ? '1' : '0');
    }

    print "\n";
}

$na = 12345;

print "A       = ";  print_bits($na);
print "A >> 1  = ";  print_bits($na >> 1);
print "A >> 2  = ";  print_bits($na >> 2);
print "A >> 3  = ";  print_bits($na >> 3);
print "A >> 4  = ";  print_bits($na >> 4);
print "\n";

print "A       = ";  print_bits($na);
print "A << 1  = ";  print_bits($na << 1);
print "A << 2  = ";  print_bits($na << 2);
print "A << 3  = ";  print_bits($na << 3);
print "A << 4  = ";  print_bits($na << 4);
?>

実行結果

L:\>php lesson_07_057.php
A = 00000000000000000011000000111001
A >> 1 = 00000000000000000001100000011100
A >> 2 = 00000000000000000000110000001110
A >> 3 = 00000000000000000000011000000111
A >> 4 = 00000000000000000000001100000011

A = 00000000000000000011000000111001
A << 1 = 00000000000000000110000001110010
A << 2 = 00000000000000001100000011100100
A << 3 = 00000000000000011000000111001000
A << 4 = 00000000000000110000001110010000