Package org.uncommons.maths.binary
Class BitString
java.lang.Object
org.uncommons.maths.binary.BitString
- All Implemented Interfaces:
Serializable
,Cloneable
Implementation of a fixed-length bit-string. Internally, bits are packed into an array of ints. This implementation makes more efficient use of space than the alternative approach of using an array of booleans.
This class is preferable to BitSet
if a fixed number of bits is
required.
- See Also:
-
Field Summary
FieldsModifier and TypeFieldDescriptionprivate int[]
Store the bits packed in an array of 32-bit ints.private final int
private static final int
-
Constructor Summary
ConstructorsConstructorDescriptionBitString
(int length) Creates a bit string of the specified length with all bits initially set to zero (off).Creates a bit string of the specified length with each bit set randomly (the distribution of bits is uniform so long as the output from the provided RNG is also uniform).Initialises the bit string from a character string of 1s and 0s in big-endian order. -
Method Summary
Modifier and TypeMethodDescriptionprivate void
assertValidIndex
(int index) Helper method to check whether a bit index is valid or not.clone()
int
int
boolean
void
flipBit
(int index) Inverts the value of the bit at the specified index.boolean
getBit
(int index) Returns the bit at the specified index.int
int
hashCode()
Over-ridden to be consistent withequals(Object)
.void
setBit
(int index, boolean set) Sets the bit at the specified index.private void
void
swapSubstring
(BitString other, int start, int length) An efficient method for exchanging data between two bit strings.toNumber()
Interprets this bit string as being a binary numeric value and returns the integer that it represents.toString()
Creates a textual representation of this bit string in big-endian order (index 0 is the right-most bit).
-
Field Details
-
WORD_LENGTH
private static final int WORD_LENGTH- See Also:
-
length
private final int length -
data
private int[] dataStore the bits packed in an array of 32-bit ints. This field cannot be declared final because it must be cloneable.
-
-
Constructor Details
-
BitString
public BitString(int length) Creates a bit string of the specified length with all bits initially set to zero (off).- Parameters:
length
- The number of bits.
-
BitString
Creates a bit string of the specified length with each bit set randomly (the distribution of bits is uniform so long as the output from the provided RNG is also uniform). Using this constructor is more efficient than creating a bit string and then randomly setting each bit individually.- Parameters:
length
- The number of bits.rng
- A source of randomness.
-
BitString
Initialises the bit string from a character string of 1s and 0s in big-endian order.- Parameters:
value
- A character string of ones and zeros.
-
-
Method Details
-
getLength
public int getLength()- Returns:
- The length of this bit string.
-
getBit
public boolean getBit(int index) Returns the bit at the specified index.- Parameters:
index
- The index of the bit to look-up (0 is the least-significant bit).- Returns:
- A boolean indicating whether the bit is set or not.
- Throws:
IndexOutOfBoundsException
- If the specified index is not a bit position in this bit string.
-
setBit
public void setBit(int index, boolean set) Sets the bit at the specified index.- Parameters:
index
- The index of the bit to set (0 is the least-significant bit).set
- A boolean indicating whether the bit should be set or not.- Throws:
IndexOutOfBoundsException
- If the specified index is not a bit position in this bit string.
-
flipBit
public void flipBit(int index) Inverts the value of the bit at the specified index.- Parameters:
index
- The bit to flip (0 is the least-significant bit).- Throws:
IndexOutOfBoundsException
- If the specified index is not a bit position in this bit string.
-
assertValidIndex
private void assertValidIndex(int index) Helper method to check whether a bit index is valid or not.- Parameters:
index
- The index to check.- Throws:
IndexOutOfBoundsException
- If the index is not valid.
-
countSetBits
public int countSetBits()- Returns:
- The number of bits that are 1s rather than 0s.
-
countUnsetBits
public int countUnsetBits()- Returns:
- The number of bits that are 0s rather than 1s.
-
toNumber
Interprets this bit string as being a binary numeric value and returns the integer that it represents.- Returns:
- A
BigInteger
that contains the numeric value represented by this bit string.
-
swapSubstring
An efficient method for exchanging data between two bit strings. Both bit strings must be long enough that they contain the full length of the specified substring.- Parameters:
other
- The bitstring with which this bitstring should swap bits.start
- The start position for the substrings to be exchanged. All bit indices are big-endian, which means position 0 is the rightmost bit.length
- The number of contiguous bits to swap.
-
swapBits
- Parameters:
other
- The BitString to exchange bits with.word
- The word index of the word that will be swapped between the two bit strings.swapMask
- A mask that specifies which bits in the word will be swapped.
-
toString
Creates a textual representation of this bit string in big-endian order (index 0 is the right-most bit). -
clone
-
equals
-
hashCode
public int hashCode()Over-ridden to be consistent withequals(Object)
.
-