jdk之BitSet位运算解析

来源:互联网 发布:vb 判断文件是否存在 编辑:程序博客网 时间:2024/05/16 06:08

不久前项目中用到了BitSet,由于之前没怎么使用过它,所以为了强化,读了几篇分析BitSet源码的文章,算是熟悉了这个类的相关API。读完之后兴致冲冲,非常想要写一篇截止目前最走心的BitSet源码分析博文。然而,各种原因耽误了之后,本人是没有这个心情写了,并且也觉得没必要,因为相关文章还是很多的。

然而,几乎所有的这些有关BitSet源码分析的博文都有一个通病:
这些文章几乎无一列外都细致分析了每一个方法的执行流程,然而,有关BitSet算法实现中的许多重要的位运算细节,都是一笔带过,感觉好遗憾啊,真正的画龙点睛之笔都被省略掉了。可以这么说吧:有的方法即使我没看明白,但是根据方法和相关变量的命名,我也能猜出这个方法大体上干了什么事情,所以,看源码分析的文章,我需要理清某些关键的实现,偏偏网上的很多关于BitSet源码分析的文章都忽略了这一点。

接下来黏贴的一些代码是为了向大家展示BitSet源码中的几个重要的位运算,这篇文章不是一篇详细的源码分析博文,想要了解原理的,读者可以参见其他技术博文,然后读其他博文时候,如果对于其中的位运算比较困惑的,再回头来看一下这篇文章,运行一下我的测试代码中的几个测试方法,相信立马就能心领神会!!!

package com.lihong.DDPush;import org.junit.Test;import java.util.BitSet;/** * Created by lihong10 on 2017/6/14. */public class BitSetTest {    static final long WORD_MASK = 0xffffffffffffffffL;    /**     * 测试BitSet的使用     */    public void test1() {        int[] shu = {2, 42, 5, 6, 6, 18, 33, 15, 25, 31, 28, 37};        BitSet bm1 = new BitSet(BitSetTest.getMaxValue(shu));        System.out.println("bm1.size()--" + bm1.size());        BitSetTest.putValueIntoBitSet(shu, bm1);        printBitSet(bm1);    }    /**     * 通过测试观察BitSet的set(int bitIndex)方法的实现细节,set方法源码如下:     public void set(int bitIndex) {     if (bitIndex < 0)     throw new IndexOutOfBoundsException("bitIndex < 0: " + bitIndex);     int wordIndex = wordIndex(bitIndex);     expandTo(wordIndex);     words[wordIndex] |= (1L << bitIndex); // Restores invariants     checkInvariants();     }     private static int wordIndex(int bitIndex) {     return bitIndex >> ADDRESS_BITS_PER_WORD;     }     */    @Test    public  void test2() {        // BitSet带参数的构造函数通过 ((i - 1) >> 6) + 1 确定long数组的长度        for (int i = 0; i < 130; i++) {            // 通过 i >> 6 确定第i个bit位所属的long的索引,            // 对应源码: int wordIndex = wordIndex(bitIndex);            int a = i >> 6;            // 将指定索引位置的bit所属的long与 该bit位为1其余位为0的数字 进行或运算,从而实现BitSet的set(int bitIndex)操作            //对应源码:words[wordIndex] |= (1L << bitIndex);            String b = toFullBinaryString(1L << i);            long c = 64 - Long.numberOfLeadingZeros(1L << i);            System.out.println(String.format("数字 %3d 属于第%3d 个long,  第%3d 个long与 %s 或运算可以将这个long的第 %2d 位设为 1", i, a, a, b, c));        }    }/**test2()方法运行结果如下,看了就能理解BitSet的set方法的实现:so,不再废话了。数字   0 属于第  0 个long,  第  0 个long与 0000000000000000000000000000000000000000000000000000000000000001 或运算可以将这个long的第  1 位设为 1数字   1 属于第  0 个long,  第  0 个long与 0000000000000000000000000000000000000000000000000000000000000010 或运算可以将这个long的第  2 位设为 1数字   2 属于第  0 个long,  第  0 个long与 0000000000000000000000000000000000000000000000000000000000000100 或运算可以将这个long的第  3 位设为 1数字   3 属于第  0 个long,  第  0 个long与 0000000000000000000000000000000000000000000000000000000000001000 或运算可以将这个long的第  4 位设为 1数字   4 属于第  0 个long,  第  0 个long与 0000000000000000000000000000000000000000000000000000000000010000 或运算可以将这个long的第  5 位设为 1数字   5 属于第  0 个long,  第  0 个long与 0000000000000000000000000000000000000000000000000000000000100000 或运算可以将这个long的第  6 位设为 1数字   6 属于第  0 个long,  第  0 个long与 0000000000000000000000000000000000000000000000000000000001000000 或运算可以将这个long的第  7 位设为 1数字   7 属于第  0 个long,  第  0 个long与 0000000000000000000000000000000000000000000000000000000010000000 或运算可以将这个long的第  8 位设为 1数字   8 属于第  0 个long,  第  0 个long与 0000000000000000000000000000000000000000000000000000000100000000 或运算可以将这个long的第  9 位设为 1数字   9 属于第  0 个long,  第  0 个long与 0000000000000000000000000000000000000000000000000000001000000000 或运算可以将这个long的第 10 位设为 1数字  10 属于第  0 个long,  第  0 个long与 0000000000000000000000000000000000000000000000000000010000000000 或运算可以将这个long的第 11 位设为 1数字  11 属于第  0 个long,  第  0 个long与 0000000000000000000000000000000000000000000000000000100000000000 或运算可以将这个long的第 12 位设为 1数字  12 属于第  0 个long,  第  0 个long与 0000000000000000000000000000000000000000000000000001000000000000 或运算可以将这个long的第 13 位设为 1数字  13 属于第  0 个long,  第  0 个long与 0000000000000000000000000000000000000000000000000010000000000000 或运算可以将这个long的第 14 位设为 1数字  14 属于第  0 个long,  第  0 个long与 0000000000000000000000000000000000000000000000000100000000000000 或运算可以将这个long的第 15 位设为 1数字  15 属于第  0 个long,  第  0 个long与 0000000000000000000000000000000000000000000000001000000000000000 或运算可以将这个long的第 16 位设为 1数字  16 属于第  0 个long,  第  0 个long与 0000000000000000000000000000000000000000000000010000000000000000 或运算可以将这个long的第 17 位设为 1数字  17 属于第  0 个long,  第  0 个long与 0000000000000000000000000000000000000000000000100000000000000000 或运算可以将这个long的第 18 位设为 1数字  18 属于第  0 个long,  第  0 个long与 0000000000000000000000000000000000000000000001000000000000000000 或运算可以将这个long的第 19 位设为 1数字  19 属于第  0 个long,  第  0 个long与 0000000000000000000000000000000000000000000010000000000000000000 或运算可以将这个long的第 20 位设为 1数字  20 属于第  0 个long,  第  0 个long与 0000000000000000000000000000000000000000000100000000000000000000 或运算可以将这个long的第 21 位设为 1数字  21 属于第  0 个long,  第  0 个long与 0000000000000000000000000000000000000000001000000000000000000000 或运算可以将这个long的第 22 位设为 1数字  22 属于第  0 个long,  第  0 个long与 0000000000000000000000000000000000000000010000000000000000000000 或运算可以将这个long的第 23 位设为 1数字  23 属于第  0 个long,  第  0 个long与 0000000000000000000000000000000000000000100000000000000000000000 或运算可以将这个long的第 24 位设为 1数字  24 属于第  0 个long,  第  0 个long与 0000000000000000000000000000000000000001000000000000000000000000 或运算可以将这个long的第 25 位设为 1数字  25 属于第  0 个long,  第  0 个long与 0000000000000000000000000000000000000010000000000000000000000000 或运算可以将这个long的第 26 位设为 1数字  26 属于第  0 个long,  第  0 个long与 0000000000000000000000000000000000000100000000000000000000000000 或运算可以将这个long的第 27 位设为 1数字  27 属于第  0 个long,  第  0 个long与 0000000000000000000000000000000000001000000000000000000000000000 或运算可以将这个long的第 28 位设为 1数字  28 属于第  0 个long,  第  0 个long与 0000000000000000000000000000000000010000000000000000000000000000 或运算可以将这个long的第 29 位设为 1数字  29 属于第  0 个long,  第  0 个long与 0000000000000000000000000000000000100000000000000000000000000000 或运算可以将这个long的第 30 位设为 1数字  30 属于第  0 个long,  第  0 个long与 0000000000000000000000000000000001000000000000000000000000000000 或运算可以将这个long的第 31 位设为 1数字  31 属于第  0 个long,  第  0 个long与 0000000000000000000000000000000010000000000000000000000000000000 或运算可以将这个long的第 32 位设为 1数字  32 属于第  0 个long,  第  0 个long与 0000000000000000000000000000000100000000000000000000000000000000 或运算可以将这个long的第 33 位设为 1数字  33 属于第  0 个long,  第  0 个long与 0000000000000000000000000000001000000000000000000000000000000000 或运算可以将这个long的第 34 位设为 1数字  34 属于第  0 个long,  第  0 个long与 0000000000000000000000000000010000000000000000000000000000000000 或运算可以将这个long的第 35 位设为 1数字  35 属于第  0 个long,  第  0 个long与 0000000000000000000000000000100000000000000000000000000000000000 或运算可以将这个long的第 36 位设为 1数字  36 属于第  0 个long,  第  0 个long与 0000000000000000000000000001000000000000000000000000000000000000 或运算可以将这个long的第 37 位设为 1数字  37 属于第  0 个long,  第  0 个long与 0000000000000000000000000010000000000000000000000000000000000000 或运算可以将这个long的第 38 位设为 1数字  38 属于第  0 个long,  第  0 个long与 0000000000000000000000000100000000000000000000000000000000000000 或运算可以将这个long的第 39 位设为 1数字  39 属于第  0 个long,  第  0 个long与 0000000000000000000000001000000000000000000000000000000000000000 或运算可以将这个long的第 40 位设为 1数字  40 属于第  0 个long,  第  0 个long与 0000000000000000000000010000000000000000000000000000000000000000 或运算可以将这个long的第 41 位设为 1数字  41 属于第  0 个long,  第  0 个long与 0000000000000000000000100000000000000000000000000000000000000000 或运算可以将这个long的第 42 位设为 1数字  42 属于第  0 个long,  第  0 个long与 0000000000000000000001000000000000000000000000000000000000000000 或运算可以将这个long的第 43 位设为 1数字  43 属于第  0 个long,  第  0 个long与 0000000000000000000010000000000000000000000000000000000000000000 或运算可以将这个long的第 44 位设为 1数字  44 属于第  0 个long,  第  0 个long与 0000000000000000000100000000000000000000000000000000000000000000 或运算可以将这个long的第 45 位设为 1数字  45 属于第  0 个long,  第  0 个long与 0000000000000000001000000000000000000000000000000000000000000000 或运算可以将这个long的第 46 位设为 1数字  46 属于第  0 个long,  第  0 个long与 0000000000000000010000000000000000000000000000000000000000000000 或运算可以将这个long的第 47 位设为 1数字  47 属于第  0 个long,  第  0 个long与 0000000000000000100000000000000000000000000000000000000000000000 或运算可以将这个long的第 48 位设为 1数字  48 属于第  0 个long,  第  0 个long与 0000000000000001000000000000000000000000000000000000000000000000 或运算可以将这个long的第 49 位设为 1数字  49 属于第  0 个long,  第  0 个long与 0000000000000010000000000000000000000000000000000000000000000000 或运算可以将这个long的第 50 位设为 1数字  50 属于第  0 个long,  第  0 个long与 0000000000000100000000000000000000000000000000000000000000000000 或运算可以将这个long的第 51 位设为 1数字  51 属于第  0 个long,  第  0 个long与 0000000000001000000000000000000000000000000000000000000000000000 或运算可以将这个long的第 52 位设为 1数字  52 属于第  0 个long,  第  0 个long与 0000000000010000000000000000000000000000000000000000000000000000 或运算可以将这个long的第 53 位设为 1数字  53 属于第  0 个long,  第  0 个long与 0000000000100000000000000000000000000000000000000000000000000000 或运算可以将这个long的第 54 位设为 1数字  54 属于第  0 个long,  第  0 个long与 0000000001000000000000000000000000000000000000000000000000000000 或运算可以将这个long的第 55 位设为 1数字  55 属于第  0 个long,  第  0 个long与 0000000010000000000000000000000000000000000000000000000000000000 或运算可以将这个long的第 56 位设为 1数字  56 属于第  0 个long,  第  0 个long与 0000000100000000000000000000000000000000000000000000000000000000 或运算可以将这个long的第 57 位设为 1数字  57 属于第  0 个long,  第  0 个long与 0000001000000000000000000000000000000000000000000000000000000000 或运算可以将这个long的第 58 位设为 1数字  58 属于第  0 个long,  第  0 个long与 0000010000000000000000000000000000000000000000000000000000000000 或运算可以将这个long的第 59 位设为 1数字  59 属于第  0 个long,  第  0 个long与 0000100000000000000000000000000000000000000000000000000000000000 或运算可以将这个long的第 60 位设为 1数字  60 属于第  0 个long,  第  0 个long与 0001000000000000000000000000000000000000000000000000000000000000 或运算可以将这个long的第 61 位设为 1数字  61 属于第  0 个long,  第  0 个long与 0010000000000000000000000000000000000000000000000000000000000000 或运算可以将这个long的第 62 位设为 1数字  62 属于第  0 个long,  第  0 个long与 0100000000000000000000000000000000000000000000000000000000000000 或运算可以将这个long的第 63 位设为 1数字  63 属于第  0 个long,  第  0 个long与 1000000000000000000000000000000000000000000000000000000000000000 或运算可以将这个long的第 64 位设为 1数字  64 属于第  1 个long,  第  1 个long与 0000000000000000000000000000000000000000000000000000000000000001 或运算可以将这个long的第  1 位设为 1数字  65 属于第  1 个long,  第  1 个long与 0000000000000000000000000000000000000000000000000000000000000010 或运算可以将这个long的第  2 位设为 1数字  66 属于第  1 个long,  第  1 个long与 0000000000000000000000000000000000000000000000000000000000000100 或运算可以将这个long的第  3 位设为 1数字  67 属于第  1 个long,  第  1 个long与 0000000000000000000000000000000000000000000000000000000000001000 或运算可以将这个long的第  4 位设为 1数字  68 属于第  1 个long,  第  1 个long与 0000000000000000000000000000000000000000000000000000000000010000 或运算可以将这个long的第  5 位设为 1数字  69 属于第  1 个long,  第  1 个long与 0000000000000000000000000000000000000000000000000000000000100000 或运算可以将这个long的第  6 位设为 1数字  70 属于第  1 个long,  第  1 个long与 0000000000000000000000000000000000000000000000000000000001000000 或运算可以将这个long的第  7 位设为 1数字  71 属于第  1 个long,  第  1 个long与 0000000000000000000000000000000000000000000000000000000010000000 或运算可以将这个long的第  8 位设为 1数字  72 属于第  1 个long,  第  1 个long与 0000000000000000000000000000000000000000000000000000000100000000 或运算可以将这个long的第  9 位设为 1数字  73 属于第  1 个long,  第  1 个long与 0000000000000000000000000000000000000000000000000000001000000000 或运算可以将这个long的第 10 位设为 1数字  74 属于第  1 个long,  第  1 个long与 0000000000000000000000000000000000000000000000000000010000000000 或运算可以将这个long的第 11 位设为 1数字  75 属于第  1 个long,  第  1 个long与 0000000000000000000000000000000000000000000000000000100000000000 或运算可以将这个long的第 12 位设为 1数字  76 属于第  1 个long,  第  1 个long与 0000000000000000000000000000000000000000000000000001000000000000 或运算可以将这个long的第 13 位设为 1数字  77 属于第  1 个long,  第  1 个long与 0000000000000000000000000000000000000000000000000010000000000000 或运算可以将这个long的第 14 位设为 1数字  78 属于第  1 个long,  第  1 个long与 0000000000000000000000000000000000000000000000000100000000000000 或运算可以将这个long的第 15 位设为 1数字  79 属于第  1 个long,  第  1 个long与 0000000000000000000000000000000000000000000000001000000000000000 或运算可以将这个long的第 16 位设为 1数字  80 属于第  1 个long,  第  1 个long与 0000000000000000000000000000000000000000000000010000000000000000 或运算可以将这个long的第 17 位设为 1数字  81 属于第  1 个long,  第  1 个long与 0000000000000000000000000000000000000000000000100000000000000000 或运算可以将这个long的第 18 位设为 1数字  82 属于第  1 个long,  第  1 个long与 0000000000000000000000000000000000000000000001000000000000000000 或运算可以将这个long的第 19 位设为 1数字  83 属于第  1 个long,  第  1 个long与 0000000000000000000000000000000000000000000010000000000000000000 或运算可以将这个long的第 20 位设为 1数字  84 属于第  1 个long,  第  1 个long与 0000000000000000000000000000000000000000000100000000000000000000 或运算可以将这个long的第 21 位设为 1数字  85 属于第  1 个long,  第  1 个long与 0000000000000000000000000000000000000000001000000000000000000000 或运算可以将这个long的第 22 位设为 1数字  86 属于第  1 个long,  第  1 个long与 0000000000000000000000000000000000000000010000000000000000000000 或运算可以将这个long的第 23 位设为 1数字  87 属于第  1 个long,  第  1 个long与 0000000000000000000000000000000000000000100000000000000000000000 或运算可以将这个long的第 24 位设为 1数字  88 属于第  1 个long,  第  1 个long与 0000000000000000000000000000000000000001000000000000000000000000 或运算可以将这个long的第 25 位设为 1数字  89 属于第  1 个long,  第  1 个long与 0000000000000000000000000000000000000010000000000000000000000000 或运算可以将这个long的第 26 位设为 1数字  90 属于第  1 个long,  第  1 个long与 0000000000000000000000000000000000000100000000000000000000000000 或运算可以将这个long的第 27 位设为 1数字  91 属于第  1 个long,  第  1 个long与 0000000000000000000000000000000000001000000000000000000000000000 或运算可以将这个long的第 28 位设为 1数字  92 属于第  1 个long,  第  1 个long与 0000000000000000000000000000000000010000000000000000000000000000 或运算可以将这个long的第 29 位设为 1数字  93 属于第  1 个long,  第  1 个long与 0000000000000000000000000000000000100000000000000000000000000000 或运算可以将这个long的第 30 位设为 1数字  94 属于第  1 个long,  第  1 个long与 0000000000000000000000000000000001000000000000000000000000000000 或运算可以将这个long的第 31 位设为 1数字  95 属于第  1 个long,  第  1 个long与 0000000000000000000000000000000010000000000000000000000000000000 或运算可以将这个long的第 32 位设为 1数字  96 属于第  1 个long,  第  1 个long与 0000000000000000000000000000000100000000000000000000000000000000 或运算可以将这个long的第 33 位设为 1数字  97 属于第  1 个long,  第  1 个long与 0000000000000000000000000000001000000000000000000000000000000000 或运算可以将这个long的第 34 位设为 1数字  98 属于第  1 个long,  第  1 个long与 0000000000000000000000000000010000000000000000000000000000000000 或运算可以将这个long的第 35 位设为 1数字  99 属于第  1 个long,  第  1 个long与 0000000000000000000000000000100000000000000000000000000000000000 或运算可以将这个long的第 36 位设为 1数字 100 属于第  1 个long,  第  1 个long与 0000000000000000000000000001000000000000000000000000000000000000 或运算可以将这个long的第 37 位设为 1数字 101 属于第  1 个long,  第  1 个long与 0000000000000000000000000010000000000000000000000000000000000000 或运算可以将这个long的第 38 位设为 1数字 102 属于第  1 个long,  第  1 个long与 0000000000000000000000000100000000000000000000000000000000000000 或运算可以将这个long的第 39 位设为 1数字 103 属于第  1 个long,  第  1 个long与 0000000000000000000000001000000000000000000000000000000000000000 或运算可以将这个long的第 40 位设为 1数字 104 属于第  1 个long,  第  1 个long与 0000000000000000000000010000000000000000000000000000000000000000 或运算可以将这个long的第 41 位设为 1数字 105 属于第  1 个long,  第  1 个long与 0000000000000000000000100000000000000000000000000000000000000000 或运算可以将这个long的第 42 位设为 1数字 106 属于第  1 个long,  第  1 个long与 0000000000000000000001000000000000000000000000000000000000000000 或运算可以将这个long的第 43 位设为 1数字 107 属于第  1 个long,  第  1 个long与 0000000000000000000010000000000000000000000000000000000000000000 或运算可以将这个long的第 44 位设为 1数字 108 属于第  1 个long,  第  1 个long与 0000000000000000000100000000000000000000000000000000000000000000 或运算可以将这个long的第 45 位设为 1数字 109 属于第  1 个long,  第  1 个long与 0000000000000000001000000000000000000000000000000000000000000000 或运算可以将这个long的第 46 位设为 1数字 110 属于第  1 个long,  第  1 个long与 0000000000000000010000000000000000000000000000000000000000000000 或运算可以将这个long的第 47 位设为 1数字 111 属于第  1 个long,  第  1 个long与 0000000000000000100000000000000000000000000000000000000000000000 或运算可以将这个long的第 48 位设为 1数字 112 属于第  1 个long,  第  1 个long与 0000000000000001000000000000000000000000000000000000000000000000 或运算可以将这个long的第 49 位设为 1数字 113 属于第  1 个long,  第  1 个long与 0000000000000010000000000000000000000000000000000000000000000000 或运算可以将这个long的第 50 位设为 1数字 114 属于第  1 个long,  第  1 个long与 0000000000000100000000000000000000000000000000000000000000000000 或运算可以将这个long的第 51 位设为 1数字 115 属于第  1 个long,  第  1 个long与 0000000000001000000000000000000000000000000000000000000000000000 或运算可以将这个long的第 52 位设为 1数字 116 属于第  1 个long,  第  1 个long与 0000000000010000000000000000000000000000000000000000000000000000 或运算可以将这个long的第 53 位设为 1数字 117 属于第  1 个long,  第  1 个long与 0000000000100000000000000000000000000000000000000000000000000000 或运算可以将这个long的第 54 位设为 1数字 118 属于第  1 个long,  第  1 个long与 0000000001000000000000000000000000000000000000000000000000000000 或运算可以将这个long的第 55 位设为 1数字 119 属于第  1 个long,  第  1 个long与 0000000010000000000000000000000000000000000000000000000000000000 或运算可以将这个long的第 56 位设为 1数字 120 属于第  1 个long,  第  1 个long与 0000000100000000000000000000000000000000000000000000000000000000 或运算可以将这个long的第 57 位设为 1数字 121 属于第  1 个long,  第  1 个long与 0000001000000000000000000000000000000000000000000000000000000000 或运算可以将这个long的第 58 位设为 1数字 122 属于第  1 个long,  第  1 个long与 0000010000000000000000000000000000000000000000000000000000000000 或运算可以将这个long的第 59 位设为 1数字 123 属于第  1 个long,  第  1 个long与 0000100000000000000000000000000000000000000000000000000000000000 或运算可以将这个long的第 60 位设为 1数字 124 属于第  1 个long,  第  1 个long与 0001000000000000000000000000000000000000000000000000000000000000 或运算可以将这个long的第 61 位设为 1数字 125 属于第  1 个long,  第  1 个long与 0010000000000000000000000000000000000000000000000000000000000000 或运算可以将这个long的第 62 位设为 1数字 126 属于第  1 个long,  第  1 个long与 0100000000000000000000000000000000000000000000000000000000000000 或运算可以将这个long的第 63 位设为 1数字 127 属于第  1 个long,  第  1 个long与 1000000000000000000000000000000000000000000000000000000000000000 或运算可以将这个long的第 64 位设为 1数字 128 属于第  2 个long,  第  2 个long与 0000000000000000000000000000000000000000000000000000000000000001 或运算可以将这个long的第  1 位设为 1数字 129 属于第  2 个long,  第  2 个long与 0000000000000000000000000000000000000000000000000000000000000010 或运算可以将这个long的第  2 位设为 1*//**调试BitSet的方法set(int fromIndex, int toIndex)中的关键代码:long firstWordMask = WORD_MASK << fromIndex;*/    @Test    public void test3() {//                for (int i = 0; i < 130; i++) {            System.out.println(toFullBinaryString(WORD_MASK << i));        }    }    /**方法运行结果如下:1111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111011111111111111111111111111111111111111111111111111111111111111001111111111111111111111111111111111111111111111111111111111111000111111111111111111111111111111111111111111111111111111111111000011111111111111111111111111111111111111111111111111111111111000001111111111111111111111111111111111111111111111111111111111000000111111111111111111111111111111111111111111111111111111111000000011111111111111111111111111111111111111111111111111111111000000001111111111111111111111111111111111111111111111111111111000000000111111111111111111111111111111111111111111111111111111000000000011111111111111111111111111111111111111111111111111111000000000001111111111111111111111111111111111111111111111111111000000000000111111111111111111111111111111111111111111111111111000000000000011111111111111111111111111111111111111111111111111000000000000001111111111111111111111111111111111111111111111111000000000000000111111111111111111111111111111111111111111111111000000000000000011111111111111111111111111111111111111111111111000000000000000001111111111111111111111111111111111111111111111000000000000000000111111111111111111111111111111111111111111111000000000000000000011111111111111111111111111111111111111111111000000000000000000001111111111111111111111111111111111111111111000000000000000000000111111111111111111111111111111111111111111000000000000000000000011111111111111111111111111111111111111111000000000000000000000001111111111111111111111111111111111111111000000000000000000000000111111111111111111111111111111111111111000000000000000000000000011111111111111111111111111111111111111000000000000000000000000001111111111111111111111111111111111111000000000000000000000000000111111111111111111111111111111111111000000000000000000000000000011111111111111111111111111111111111000000000000000000000000000001111111111111111111111111111111111000000000000000000000000000000111111111111111111111111111111111000000000000000000000000000000011111111111111111111111111111111000000000000000000000000000000001111111111111111111111111111111000000000000000000000000000000000111111111111111111111111111111000000000000000000000000000000000011111111111111111111111111111000000000000000000000000000000000001111111111111111111111111111000000000000000000000000000000000000111111111111111111111111111000000000000000000000000000000000000011111111111111111111111111000000000000000000000000000000000000001111111111111111111111111000000000000000000000000000000000000000111111111111111111111111000000000000000000000000000000000000000011111111111111111111111000000000000000000000000000000000000000001111111111111111111111000000000000000000000000000000000000000000111111111111111111111000000000000000000000000000000000000000000011111111111111111111000000000000000000000000000000000000000000001111111111111111111000000000000000000000000000000000000000000000111111111111111111000000000000000000000000000000000000000000000011111111111111111000000000000000000000000000000000000000000000001111111111111111000000000000000000000000000000000000000000000000111111111111111000000000000000000000000000000000000000000000000011111111111111000000000000000000000000000000000000000000000000001111111111111000000000000000000000000000000000000000000000000000111111111111000000000000000000000000000000000000000000000000000011111111111000000000000000000000000000000000000000000000000000001111111111000000000000000000000000000000000000000000000000000000111111111000000000000000000000000000000000000000000000000000000011111111000000000000000000000000000000000000000000000000000000001111111000000000000000000000000000000000000000000000000000000000111111000000000000000000000000000000000000000000000000000000000011111000000000000000000000000000000000000000000000000000000000001111000000000000000000000000000000000000000000000000000000000000111000000000000000000000000000000000000000000000000000000000000011000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111101111111111111111111111111111111111111111111111111111111111111100111111111111111111111111111111111111111111111111111111111111100011111111111111111111111111111111111111111111111111111111111100001111111111111111111111111111111111111111111111111111111111100000111111111111111111111111111111111111111111111111111111111100000011111111111111111111111111111111111111111111111111111111100000001111111111111111111111111111111111111111111111111111111100000000111111111111111111111111111111111111111111111111111111100000000011111111111111111111111111111111111111111111111111111100000000001111111111111111111111111111111111111111111111111111100000000000111111111111111111111111111111111111111111111111111100000000000011111111111111111111111111111111111111111111111111100000000000001111111111111111111111111111111111111111111111111100000000000000111111111111111111111111111111111111111111111111100000000000000011111111111111111111111111111111111111111111111100000000000000001111111111111111111111111111111111111111111111100000000000000000111111111111111111111111111111111111111111111100000000000000000011111111111111111111111111111111111111111111100000000000000000001111111111111111111111111111111111111111111100000000000000000000111111111111111111111111111111111111111111100000000000000000000011111111111111111111111111111111111111111100000000000000000000001111111111111111111111111111111111111111100000000000000000000000111111111111111111111111111111111111111100000000000000000000000011111111111111111111111111111111111111100000000000000000000000001111111111111111111111111111111111111100000000000000000000000000111111111111111111111111111111111111100000000000000000000000000011111111111111111111111111111111111100000000000000000000000000001111111111111111111111111111111111100000000000000000000000000000111111111111111111111111111111111100000000000000000000000000000011111111111111111111111111111111100000000000000000000000000000001111111111111111111111111111111100000000000000000000000000000000111111111111111111111111111111100000000000000000000000000000000011111111111111111111111111111100000000000000000000000000000000001111111111111111111111111111100000000000000000000000000000000000111111111111111111111111111100000000000000000000000000000000000011111111111111111111111111100000000000000000000000000000000000001111111111111111111111111100000000000000000000000000000000000000111111111111111111111111100000000000000000000000000000000000000011111111111111111111111100000000000000000000000000000000000000001111111111111111111111100000000000000000000000000000000000000000111111111111111111111100000000000000000000000000000000000000000011111111111111111111100000000000000000000000000000000000000000001111111111111111111100000000000000000000000000000000000000000000111111111111111111100000000000000000000000000000000000000000000011111111111111111100000000000000000000000000000000000000000000001111111111111111100000000000000000000000000000000000000000000000111111111111111100000000000000000000000000000000000000000000000011111111111111100000000000000000000000000000000000000000000000001111111111111100000000000000000000000000000000000000000000000000111111111111100000000000000000000000000000000000000000000000000011111111111100000000000000000000000000000000000000000000000000001111111111100000000000000000000000000000000000000000000000000000111111111100000000000000000000000000000000000000000000000000000011111111100000000000000000000000000000000000000000000000000000001111111100000000000000000000000000000000000000000000000000000000111111100000000000000000000000000000000000000000000000000000000011111100000000000000000000000000000000000000000000000000000000001111100000000000000000000000000000000000000000000000000000000000111100000000000000000000000000000000000000000000000000000000000011100000000000000000000000000000000000000000000000000000000000001100000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000011111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110    *//**调试BitSet的方法set(int fromIndex, int toIndex)中的关键代码:long lastWordMask  = WORD_MASK >>> -toIndex;*/    @Test    public void test4() {        //        long lastWordMask  = WORD_MASK >>> -toIndex;        for (int i = 0; i < 130; i++) {            System.out.println(toFullBinaryString(WORD_MASK >>> -i));        }    }    /**    test4()运行结果如下:    1111111111111111111111111111111111111111111111111111111111111111000000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000110000000000000000000000000000000000000000000000000000000000000111000000000000000000000000000000000000000000000000000000000000111100000000000000000000000000000000000000000000000000000000000111110000000000000000000000000000000000000000000000000000000000111111000000000000000000000000000000000000000000000000000000000111111100000000000000000000000000000000000000000000000000000000111111110000000000000000000000000000000000000000000000000000000111111111000000000000000000000000000000000000000000000000000000111111111100000000000000000000000000000000000000000000000000000111111111110000000000000000000000000000000000000000000000000000111111111111000000000000000000000000000000000000000000000000000111111111111100000000000000000000000000000000000000000000000000111111111111110000000000000000000000000000000000000000000000000111111111111111000000000000000000000000000000000000000000000000111111111111111100000000000000000000000000000000000000000000000111111111111111110000000000000000000000000000000000000000000000111111111111111111000000000000000000000000000000000000000000000111111111111111111100000000000000000000000000000000000000000000111111111111111111110000000000000000000000000000000000000000000111111111111111111111000000000000000000000000000000000000000000111111111111111111111100000000000000000000000000000000000000000111111111111111111111110000000000000000000000000000000000000000111111111111111111111111000000000000000000000000000000000000000111111111111111111111111100000000000000000000000000000000000000111111111111111111111111110000000000000000000000000000000000000111111111111111111111111111000000000000000000000000000000000000111111111111111111111111111100000000000000000000000000000000000111111111111111111111111111110000000000000000000000000000000000111111111111111111111111111111000000000000000000000000000000000111111111111111111111111111111100000000000000000000000000000000111111111111111111111111111111110000000000000000000000000000000111111111111111111111111111111111000000000000000000000000000000111111111111111111111111111111111100000000000000000000000000000111111111111111111111111111111111110000000000000000000000000000111111111111111111111111111111111111000000000000000000000000000111111111111111111111111111111111111100000000000000000000000000111111111111111111111111111111111111110000000000000000000000000111111111111111111111111111111111111111000000000000000000000000111111111111111111111111111111111111111100000000000000000000000111111111111111111111111111111111111111110000000000000000000000111111111111111111111111111111111111111111000000000000000000000111111111111111111111111111111111111111111100000000000000000000111111111111111111111111111111111111111111110000000000000000000111111111111111111111111111111111111111111111000000000000000000111111111111111111111111111111111111111111111100000000000000000111111111111111111111111111111111111111111111110000000000000000111111111111111111111111111111111111111111111111000000000000000111111111111111111111111111111111111111111111111100000000000000111111111111111111111111111111111111111111111111110000000000000111111111111111111111111111111111111111111111111111000000000000111111111111111111111111111111111111111111111111111100000000000111111111111111111111111111111111111111111111111111110000000000111111111111111111111111111111111111111111111111111111000000000111111111111111111111111111111111111111111111111111111100000000111111111111111111111111111111111111111111111111111111110000000111111111111111111111111111111111111111111111111111111111000000111111111111111111111111111111111111111111111111111111111100000111111111111111111111111111111111111111111111111111111111110000111111111111111111111111111111111111111111111111111111111111000111111111111111111111111111111111111111111111111111111111111100111111111111111111111111111111111111111111111111111111111111110111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111100000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000011000000000000000000000000000000000000000000000000000000000000011100000000000000000000000000000000000000000000000000000000000011110000000000000000000000000000000000000000000000000000000000011111000000000000000000000000000000000000000000000000000000000011111100000000000000000000000000000000000000000000000000000000011111110000000000000000000000000000000000000000000000000000000011111111000000000000000000000000000000000000000000000000000000011111111100000000000000000000000000000000000000000000000000000011111111110000000000000000000000000000000000000000000000000000011111111111000000000000000000000000000000000000000000000000000011111111111100000000000000000000000000000000000000000000000000011111111111110000000000000000000000000000000000000000000000000011111111111111000000000000000000000000000000000000000000000000011111111111111100000000000000000000000000000000000000000000000011111111111111110000000000000000000000000000000000000000000000011111111111111111000000000000000000000000000000000000000000000011111111111111111100000000000000000000000000000000000000000000011111111111111111110000000000000000000000000000000000000000000011111111111111111111000000000000000000000000000000000000000000011111111111111111111100000000000000000000000000000000000000000011111111111111111111110000000000000000000000000000000000000000011111111111111111111111000000000000000000000000000000000000000011111111111111111111111100000000000000000000000000000000000000011111111111111111111111110000000000000000000000000000000000000011111111111111111111111111000000000000000000000000000000000000011111111111111111111111111100000000000000000000000000000000000011111111111111111111111111110000000000000000000000000000000000011111111111111111111111111111000000000000000000000000000000000011111111111111111111111111111100000000000000000000000000000000011111111111111111111111111111110000000000000000000000000000000011111111111111111111111111111111000000000000000000000000000000011111111111111111111111111111111100000000000000000000000000000011111111111111111111111111111111110000000000000000000000000000011111111111111111111111111111111111000000000000000000000000000011111111111111111111111111111111111100000000000000000000000000011111111111111111111111111111111111110000000000000000000000000011111111111111111111111111111111111111000000000000000000000000011111111111111111111111111111111111111100000000000000000000000011111111111111111111111111111111111111110000000000000000000000011111111111111111111111111111111111111111000000000000000000000011111111111111111111111111111111111111111100000000000000000000011111111111111111111111111111111111111111110000000000000000000011111111111111111111111111111111111111111111000000000000000000011111111111111111111111111111111111111111111100000000000000000011111111111111111111111111111111111111111111110000000000000000011111111111111111111111111111111111111111111111000000000000000011111111111111111111111111111111111111111111111100000000000000011111111111111111111111111111111111111111111111110000000000000011111111111111111111111111111111111111111111111111000000000000011111111111111111111111111111111111111111111111111100000000000011111111111111111111111111111111111111111111111111110000000000011111111111111111111111111111111111111111111111111111000000000011111111111111111111111111111111111111111111111111111100000000011111111111111111111111111111111111111111111111111111110000000011111111111111111111111111111111111111111111111111111111000000011111111111111111111111111111111111111111111111111111111100000011111111111111111111111111111111111111111111111111111111110000011111111111111111111111111111111111111111111111111111111111000011111111111111111111111111111111111111111111111111111111111100011111111111111111111111111111111111111111111111111111111111110011111111111111111111111111111111111111111111111111111111111111011111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111111110000000000000000000000000000000000000000000000000000000000000001    */    /**     * 将数字long转换成长度是64的二进制字符串     * @param i     * @return     */   public static String toFullBinaryString(long i) {       return toUnsignedString(i, 1);   }    /**     * /**     * 将数字long转换成长度是64的二进制字符串     * @param i     * @return     */    private static String toUnsignedString(long i, int shift) {        char[] buf = new char[64];        for(int k = 0; k < buf.length; k++) {            buf[k] = '0';        }        int charPos = 64;        int radix = 1 << shift;        long mask = radix - 1;        do {            buf[--charPos] = digits[(int)(i & mask)];            i >>>= shift;        } while (i != 0);        return new String(buf);    }    static char[] digits = {            '0' , '1' , '2' , '3' , '4' , '5' ,            '6' , '7' , '8' , '9' , 'a' , 'b' ,            'c' , 'd' , 'e' , 'f' , 'g' , 'h' ,            'i' , 'j' , 'k' , 'l' , 'm' , 'n' ,            'o' , 'p' , 'q' , 'r' , 's' , 't' ,            'u' , 'v' , 'w' , 'x' , 'y' , 'z'    };    //初始全部为false,这个你可以不用,因为默认都是false    public static void initBitSet(BitSet bs) {        for (int i = 0; i < bs.size(); i++) {            bs.set(i, false);        }    }    //打印    public static void printBitSet(BitSet bs) {        StringBuffer buf = new StringBuffer();        buf.append("[\n");        for (int i = 0; i < bs.size(); i++) {            if (i < bs.size() - 1) {                buf.append(BitSetTest.getBitTo10(bs.get(i)) + ",");            } else {                buf.append(BitSetTest.getBitTo10(bs.get(i)));            }            if ((i + 1) % 8 == 0 && i != 0) {                buf.append("\n");            }        }        buf.append("]");        System.out.println(buf.toString());    }    //找出数据集合最大值    public static int getMaxValue(int[] zu) {        int temp = 0;        temp = zu[0];        for (int i = 0; i < zu.length; i++) {            if (temp < zu[i]) {                temp = zu[i];            }        }        System.out.println("maxvalue:" + temp);        return temp;    }    //放值    public static void putValueIntoBitSet(int[] shu, BitSet bs) {        for (int i = 0; i < shu.length; i++) {            bs.set(shu[i], true);        }    }    //true,false换成1,0为了好看    public static String getBitTo10(boolean flag) {        String a = "";        if (flag == true) {            return "1";        } else {            return "0";        }    }}
原创粉丝点击