Java examples for java.util:BitSet
Creates a BitSet representation of a given long
/*//from ww w. j a v a2 s .com * Copyright (c) 2012 The Broad Institute * * Permission is hereby granted, free of charge, to any person * obtaining a copy of this software and associated documentation * files (the "Software"), to deal in the Software without * restriction, including without limitation the rights to use, * copy, modify, merge, publish, distribute, sublicense, and/or sell * copies of the Software, and to permit persons to whom the * Software is furnished to do so, subject to the following * conditions: * * The above copyright notice and this permission notice shall be * included in all copies or substantial portions of the Software. * * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR * THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ //package com.java2s; import java.util.BitSet; import java.util.HashMap; import java.util.Map; public class Main { public static void main(String[] argv) throws Exception { long number = 2; System.out.println(bitSetFrom(number)); } static final private byte NBITS_LONG_REPRESENTATION = 64; static final private byte NBITS_SHORT_REPRESENTATION = 16; private static final Map<Short, BitSet> shortCache = new HashMap<Short, BitSet>( 2 * Short.MAX_VALUE); /** * Creates a BitSet representation of a given long * * @param number the number to turn into a bitset * @return a bitset representation of the long */ public static BitSet bitSetFrom(long number) { return bitSetFrom(number, NBITS_LONG_REPRESENTATION); } /** * Creates a BitSet representation of a given short * * @param number the number to turn into a bitset * @return a bitset representation of the short */ public static BitSet bitSetFrom(short number) { BitSet result = shortCache.get(number); if (result == null) { result = bitSetFrom(number, NBITS_SHORT_REPRESENTATION); shortCache.put(number, result); } return result; } /** * Creates a BitSet representation of an arbitrary integer (number of bits capped at 64 -- long precision) * * @param number the number to turn into a bitset * @param nBits the number of bits to use as precision for this conversion * @return a bitset representation of the integer */ public static BitSet bitSetFrom(long number, int nBits) { BitSet bitSet = new BitSet(nBits); boolean isNegative = number < 0; int bitIndex = 0; while (number != 0) { if (number % 2 != 0) bitSet.set(bitIndex); bitIndex++; number /= 2; } if (isNegative) { boolean foundFirstSetBit = false; for (int i = bitSet.nextSetBit(0); i < nBits && i >= 0; i++) { boolean bit = bitSet.get(i); if (!foundFirstSetBit && bit) foundFirstSetBit = true; // maintain all bits until the first 1 is found (inclusive) else if (foundFirstSetBit) bitSet.flip(i); // flip every other bit up to NBITS_REPRESENTATION } } return bitSet; } }