Help language development. Donate to The Perl Foundation

## Bits zef:lizmat last updated on 2021-11-07

d9df07d63d62422f4aff1c5d75b2e7bdfc62b31a/

# NAME

Bits - provide bit related functions for arbitrarily large integers

# SYNOPSIS

``````use Bits;  # exports "bit", "bits", "bitcnt", "bitswap"

say bit(8, 3);    # 1000 -> True
say bit(7, 3);    # 0111 -> False

say bits(8);      # 1000 -> (3,).Seq
say bits(7);      # 0111 -> (0,1,2).Seq

say bitcnt(8);    # 1000 -> 1
say bitcnt(7);    # 0111 -> 3

say bitswap(1);   # 0001 -> 1110
say bitswap(-1);  # 1111 -> 0000
``````

# DESCRIPTION

This module exports a number of function to handle significant bits in arbitrarily large integer values, aka bitmaps. If the specified value is zero or positive, then the on-bits will be considered significant. If the specified value is negative, then the off-bits in the value will be considered significant.

# SUBROUTINES

## bit

``````sub bit(Int:D value, UInt:D bit --> Bool:D)
``````

Takes an integer value and a bit number and returns whether that bit is significant (1 for positive values, 0 for negative values).

## bits

``````sub bits(Int:D value --> Seq:D)
``````

Takes an integer value and returns a `Seq`uence of the bit numbers that are significant in the value. For negative values, these are the bits that are 0.

## bitcnt

``````sub bitcnt(Int:D value --> Int:D)
``````

Takes an integer value and returns the number of significant bits that are set in the value. For negative values, this is the number of bits that are 0.

## bitswap

``````sub bitswap(Int:D value --> Int:D)
``````

Takes an integer value and returns an integer value with all of the 1-bits turned to 0-bits and vice-versa.

# AUTHOR

Elizabeth Mattijsen [email protected]

Source can be located at: https://github.com/lizmat/Bits . Comments and Pull Requests are welcome.