private static int sum(ByteBuffer bb) {
int sum = 0;
while (bb.hasRemaining()) {
    if ((sum & 1) != 0)
sum = (sum >> 1) + 0x8000;
    else
sum >>= 1;
    sum += bb.get() & 0xff;
    sum &= 0xffff;
}
return sum;
    }
请问这段代码什么意思他完成了什么功能,为什么要这样?
sum = (sum >> 1) + 0x8000;是什么意思,为什么要在右移之后+0x8000?0x8000代表什么?
同理0xff和0xffff各有什么意义?
多谢高手指教?!?!