論理和・論理積・排他的論理和

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

論理和論理積排他的論理和

C


#include <stdio.h>

int count_bits(unsigned x)
{
int count = 0;
while (x)
{
if (x & 1u) count++;
x >>= 1;
}
return count;
}

int int_bits(void)
{
return count_bits(~0u);
}

void print_bits(unsigned x)
{
int i;
for (i = int_bits() - 1; i >= 0; i--)
putchar(((x >> i) & 1u) ? '1' : '0');

putchar('\n');
}

int main(int argc, char* argv[])
{
unsigned na = 12345;
unsigned nb = 54321;

printf("A = "); print_bits(na);
printf("NOT A = "); print_bits(~na);
putchar('\n');

printf("A = "); print_bits(na);
printf("B = "); print_bits(nb);
printf("A AND B = "); print_bits(na & nb);
putchar('\n');

printf("A = "); print_bits(na);
printf("B = "); print_bits(nb);
printf("A OR B = "); print_bits(na | nb);
putchar('\n');

printf("A = "); print_bits(na);
printf("B = "); print_bits(nb);
printf("A XOR B = "); print_bits(na ^ nb);

return 0;
}

実行結果


R:\>lesson056\project1.exe
A = 00000000000000000011000000111001
NOT A = 11111111111111111100111111000110

A = 00000000000000000011000000111001
B = 00000000000000001101010000110001
A AND B = 00000000000000000001000000110001

A = 00000000000000000011000000111001
B = 00000000000000001101010000110001
A OR B = 00000000000000001111010000111001

A = 00000000000000000011000000111001
B = 00000000000000001101010000110001
A XOR B = 00000000000000001110010000001000

Delphi


program Project1;

{$APPTYPE CONSOLE}

uses
SysUtils;

function count_bits(x:Longword):Integer;
var
count:Integer;
begin
count := 0;
while (x <> 0) do
begin
if x and 1 <> 0 then inc(count);
x := x shr 1;
end;
result := count;
end;

function int_bits():Integer;
begin
result := count_bits(Longword(not 0));
end;

procedure print_bits(x:Longword);
var
i: Integer;
begin
for i := int_bits() - 1 downto 0 do
begin
if x shr i and 1 <> 0 then
write('1')
else
write('0');
end;

writeln('');
end;

procedure main();
var
na, nb:Longword;
begin
na := 12345;
nb := 54321;
write('A = '); print_bits(na);
write('NOT A = '); print_bits(not na);
writeln('');

write('A = '); print_bits(na);
write('B = '); print_bits(nb);
write('A AND B = '); print_bits(na and nb);
writeln('');

write('A = '); print_bits(na);
write('B = '); print_bits(nb);
write('A OR B = '); print_bits(na or nb);
writeln('');

write('A = '); print_bits(na);
write('B = '); print_bits(nb);
write('A XOR B = '); print_bits(na xor nb);
end;

begin
main;
end.

実行結果


S:\>lesson056\project1.exe
A = 00000000000000000011000000111001
NOT A = 11111111111111111100111111000110

A = 00000000000000000011000000111001
B = 00000000000000001101010000110001
A AND B = 00000000000000000001000000110001

A = 00000000000000000011000000111001
B = 00000000000000001101010000110001
A OR B = 00000000000000001111010000111001

A = 00000000000000000011000000111001
B = 00000000000000001101010000110001
A XOR B = 00000000000000001110010000001000

Perl
sub count_bits
{
    my ($x) = @_;
    $count = 0;
    while ($x)
    {
        $count++ if ($x & 1) ;
        $x >>= 1;
    }
    return $count;
}

sub int_bits
{
    return &count_bits(~0);
}

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

    print "\n";
}

$na = 12345;
$nb = 54321;

print "A       = ";  &print_bits($na);
print "NOT A   = ";  &print_bits(~$na);
print "\n";

print "A       = ";  &print_bits($na);
print "B       = ";  &print_bits($nb);
print "A AND B = ";  &print_bits($na & $nb);
print "\n";

print "A       = ";  &print_bits($na);
print "B       = ";  &print_bits($nb);
print "A OR B  = ";  &print_bits($na | $nb);
print "\n";

print "A       = ";  &print_bits($na);
print "B       = ";  &print_bits($nb);
print "A XOR B = ";  &print_bits($na ^ $nb);

実行結果

L:\>perl lesson_07_056.pl
A = 00000000000000000011000000111001
NOT A = 11111111111111111100111111000110

A = 00000000000000000011000000111001
B = 00000000000000001101010000110001
A AND B = 00000000000000000001000000110001

A = 00000000000000000011000000111001
B = 00000000000000001101010000110001
A OR B = 00000000000000001111010000111001

A = 00000000000000000011000000111001
B = 00000000000000001101010000110001
A XOR B = 00000000000000001110010000001000

Ruby
def count_bits(x)
    count = 0
    while (x != 0)
        count += 1 if (x & 1 != 0) 
        x = (x >> 1) & ~(~0 << (x.size * 8))
    end
    return count
end

def int_bits
    return count_bits(~0)
end

def print_bits(x)
    (int_bits - 1).downto(0) do |i|
        print(((x >> i) & 1) != 0 ? '1' : '0')
    end

    puts ""
end

na = 12345
nb = 54321

print "A       = ";  print_bits(na)
print "NOT A   = ";  print_bits(~na)
puts  ""

print "A       = ";  print_bits(na)
print "B       = ";  print_bits(nb)
print "A AND B = ";  print_bits(na & nb)
puts  ""

print "A       = ";  print_bits(na)
print "B       = ";  print_bits(nb)
print "A OR B  = ";  print_bits(na | nb)
puts  ""

print "A       = ";  print_bits(na)
print "B       = ";  print_bits(nb)
print "A XOR B = ";  print_bits(na ^ nb)

実行結果

L:\>ruby l:\lesson_07_056.rb
A = 000000000000000000011000000111001
NOT A = 111111111111111111100111111000110

A = 000000000000000000011000000111001
B = 000000000000000001101010000110001
A AND B = 000000000000000000001000000110001

A = 000000000000000000011000000111001
B = 000000000000000001101010000110001
A OR B = 000000000000000001111010000111001

A = 000000000000000000011000000111001
B = 000000000000000001101010000110001
A XOR B = 000000000000000001110010000001000