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

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

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

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