basics/integers/bit_predicates.rb
tests/_examples/basics/integers/bit_predicates.rb in the metorex repository.
# `allbits?` asks whether every bit of the mask is set, `anybits?` whether any
# is, and `nobits?` whether none is.
p 42.allbits? 42
p 0b1010_1010.allbits? 0b1000_0010
p 0b1010_1010.allbits? 0b1000_0001
p 0b1010_1010.anybits? 0b1000_0001
p 0b1010_1010.anybits? 0b0101_0101
p 0b1010_1010.nobits? 0b0101_0101
p 0b1010_1010.nobits? 0b1000_0001
# Negative numbers compare in two's complement, and a number past the fixnum
# range compares the same way.
complement = ~0b1
p complement.allbits? 42
negative = -42
p negative.allbits? negative
huge = 2 ** 64
left = 0b1010_1010 | huge
p left.allbits? 0b1000_0010 | huge
p left.nobits? 0b0101_0101
# The mask is asked for `to_int`.
class BitMask
def to_int
0b10
end
end
mask = BitMask.new
p 0b110.allbits? mask
begin
13.allbits? "10"
rescue TypeError => error
puts error.message
end
Output:
true
true
false
true
false
true
false
true
true
true
true
true
no implicit conversion of String into Integer