home > 写経編 > 柴田望洋『明解C言語 入門編』 > 7. 基本型 >

ForNext

Only Do What Only You Can Do

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

VBScript

JScript

Perl

更新日 : 2010.10.18
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

PHP

更新日 : 2010.11.03
<?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;
$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:\>php lesson_07_056.php
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

Python

更新日 : 2010.11.17
import sys

def count_bits(x):
    count = 0
    while (x != 0):
        if (x & 1 != 0):
            count +=1
        x = (x >> 1) & ~(~0 << (sys.getsizeof(x) * 8));
    return count

def int_bits():
    return count_bits(~0)

def print_bits(x):
    for i in range(int_bits() - 1, -1,  -1):
        if ((x >> i) & 1) != 0:
            sys.stdout.write("1")
        else:
            sys.stdout.write("0")
    print

na = 12345
nb = 54321

sys.stdout.write("A       = ");  print_bits(na)
sys.stdout.write("NOT A   = ");  print_bits(~na)
print

sys.stdout.write("A       = ");  print_bits(na)
sys.stdout.write("B       = ");  print_bits(nb)
sys.stdout.write("A AND B = ");  print_bits(na & nb)
print

sys.stdout.write("A       = ");  print_bits(na)
sys.stdout.write("B       = ");  print_bits(nb)
sys.stdout.write("A OR B  = ");  print_bits(na | nb)
print

sys.stdout.write("A       = ");  print_bits(na)
sys.stdout.write("B       = ");  print_bits(nb)
sys.stdout.write("A XOR B = ");  print_bits(na ^ nb)
N:\>python lesson_07_056.py
A       = 0000000000000000000000000000000000000000000000000000000000000000000000000000000000011000000111001
NOT A   = 1111111111111111111111111111111111111111111111111111111111111111111111111111111111100111111000110

A       = 0000000000000000000000000000000000000000000000000000000000000000000000000000000000011000000111001
B       = 0000000000000000000000000000000000000000000000000000000000000000000000000000000001101010000110001
A AND B = 0000000000000000000000000000000000000000000000000000000000000000000000000000000000001000000110001

A       = 0000000000000000000000000000000000000000000000000000000000000000000000000000000000011000000111001
B       = 0000000000000000000000000000000000000000000000000000000000000000000000000000000001101010000110001
A OR B  = 0000000000000000000000000000000000000000000000000000000000000000000000000000000001111010000111001

A       = 0000000000000000000000000000000000000000000000000000000000000000000000000000000000011000000111001
B       = 0000000000000000000000000000000000000000000000000000000000000000000000000000000001101010000110001
A XOR B = 0000000000000000000000000000000000000000000000000000000000000000000000000000000001110010000001000

Ruby

更新日 : 2010.11.01
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

PowerShell

Scala

F#

C

更新日 : 2010.10.08
#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

C++

C++Builder

VC++

C#

Java

更新日 : 2010.11.05
class Lesson056 {
    public static void main(String[] args) {
        int na = 12345;
        int nb = 54321;

        System.out.printf("A       = ");  print_bits(na);
        System.out.printf("NOT A   = ");  print_bits(~na);
        System.out.print('\n');

        System.out.printf("A       = ");  print_bits(na);
        System.out.printf("B       = ");  print_bits(nb);
        System.out.printf("A AND B = ");  print_bits(na & nb);
        System.out.print('\n');

        System.out.printf("A       = ");  print_bits(na);
        System.out.printf("B       = ");  print_bits(nb);
        System.out.printf("A OR B  = ");  print_bits(na | nb);
        System.out.print('\n');

        System.out.printf("A       = ");  print_bits(na);
        System.out.printf("B       = ");  print_bits(nb);
        System.out.printf("A XOR B = ");  print_bits(na ^ nb);
    }

    static void print_bits(int x)
    {
        int i;
        for (i = int_bits() - 1; i >= 0; i--)
            System.out.print(((x >>> i) & 1) != 0 ? '1' : '0');

        System.out.print('\n');
    }

    static int int_bits()
    {
        return count_bits(~0);
    }

    static int count_bits(int x)
    {
        int count = 0;
        while (x != 0)
        {
            if ((x & 1) != 0) count++;
            x >>>= 1;
        }
        return count;
    }
}
L:\>java Lesson056
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

Objective-C

D

VB

VB.NET

Delphi

更新日 : 2010.09.24
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

Ada

PL/SQL

T-SQL

関数型

inserted by FC2 system