Problem with BitSet.length()...
2 Message(s) by 2 Author(s) originally posted in java programming
| From: Mothra |
Date: Thursday, August 16, 2007
|
... is that it doesn't return the length of the
bit set. For example, if
I create a new 8-bit set:
BitSet eightBits = new BitSet(8);Running eightBits.length() returns zero, rather than eight.
The problem is that I want to be able to convert the bit set back to an
int eger at some point. I thought the easiest way'd be to iterate
backwards over the bit set thus:
private static int bitsToInt(BitSet bits) {
int myInt = 0;
int binColumn = 1;
//
loop over the bitset backwards, adding up the true values
for (int i=(bits.length()-1); i>=0; i--) {
myInt += (booleanToInt(bits.get(i)) * binColumn);
binColumn = (binColumn * 2);
}
return myInt;
}
But because BitSet.length only returns the length from the highest
bit that's set to "true", this does not work for any
binary numbers that
start with zeros in the full bit set (e.g. an 8-bit set of '00111000').
I suppose my
method could take in a 'length'
parameter that I coul define,
but is not there a neater way of getting the true length of a BitSet?
| From: Joshua Cranmer |
Date: Thursday, August 16, 2007
|
wrote in message:
Running eightBits.length() returns zero, rather than eight.
Logically speaking, if length() returns the perceived size and not the
actual size, then there'd be a
function that returns the actual size
if it might be pertinent. This function'd also have a name similar
to "length", like "
capacity " or "size". Capacity is used for both
ArrayList and String{Builder,Buffer}, for example. Searching the
JAVAdocs for BitSet reveals this (in the function summary table):
size() - Returns the number of bits of
space actually in use by this
BitSet to represent bit values.
private static int bitsToInt(BitSet bits) {
What if BitSet.size() > 32?--
Beware of bugs in the above code; I have only proved it correct, not
tried it. -- Donald E.
Knuth
Next Message: Need help linking & packages