当调用add方法时,先把x分成高16位和低16位。
 ">>> "是 Java 中的无符号右移操作符,表示将 x 的二进制表示向右移动 16 位
 当x为 65535 ,二进制为1111111111111111,16个1,即丢掉右16位,左边补0,所以x >>> 16=0,
 当x为 65536 ,二进制为10000000000000000,17位,右16个0,所以x >>> 16=1
    public void add(int x) {char hb = Util.highbits(x);int i = this.highLowContainer.getIndex(hb);if (i >= 0) {this.highLowContainer.setContainerAtIndex(i, this.highLowContainer.getContainerAtIndex(i).add(Util.lowbits(x)));} else {ArrayContainer newac = new ArrayContainer();this.highLowContainer.insertNewKeyValueAt(-i - 1, hb, newac.add(Util.lowbits(x)));}}protected static char highbits(int x) {return (char)(x >>> 16);}
 public Container add(char x) {if (this.cardinality == 0 || this.cardinality > 0 && x > this.content[this.cardinality - 1]) {if (this.cardinality >= 4096) {return this.toBitmapContainer().add(x);}if (this.cardinality >= this.content.length) {this.increaseCapacity();}this.content[this.cardinality++] = x;} else {int loc = Util.unsignedBinarySearch(this.content, 0, this.cardinality, x);if (loc < 0) {if (this.cardinality >= 4096) {return this.toBitmapContainer().add(x);}if (this.cardinality >= this.content.length) {this.increaseCapacity();}System.arraycopy(this.content, -loc - 1, this.content, -loc, this.cardinality + loc + 1);this.content[-loc - 1] = x;++this.cardinality;}}return this;}

 65535在0号桶,存的低16位,就是本身65535
 65536在1号桶,存的低16位,16个0,即0
 
 访问的时候,也是先计算高位获得桶,然后用低位来算是否包含
    public boolean contains(int x) {char hb = Util.highbits(x);Container c = this.highLowContainer.getContainer(hb);return c != null && c.contains(Util.lowbits(x));}
参考:
https://blog.csdn.net/S_ZaiJiangHu/article/details/125656217