[Solved] Why Bitset allows values distinct from 1 and 0?


BitSet logically represents a “vector of bits that grows as needed” (javadoc).

When you create it via new BitSet(), you have all bits set to 0 (false).

0    5    10
|    |    |
000000000000... (virtually infinite sequence)

Using set(x) you set to 1 (true) the bit at position x (where the first position is 0); e.g. in your code you enable bits 3, 5 and 9.

0    5    10
|    |    |
000101000100...

toString() reports the list of bits set to 1, i.e. 3, 5 and 9 in the example.

toByteArray() converts the contents of the BitSet to a sequence of byte values, each containing the value of 8 contiguous bits, in little-endian order (i.e. starting from least indices in the BitSet). The output {40, 2} in your example comes from:

 7      0   15     8    <- position in BitSet
 |      |   |      |
{00101000 , 00000010}   <- toByteArray(), binary
    |          |
{  40     ,    2    }   <- toByteArray(), decimal

Hope this helps.

2

solved Why Bitset allows values distinct from 1 and 0?