【发布时间】:2015-01-16 20:32:10
【问题描述】:
我尝试理解用 Java 语言编写的 BSD 校验和计算算法。
维基写道:
byte checksum(byte[] input) {
byte checksum = 0;
for (byte cur_byte: input) {
checksum = (byte) (((checksum & 0xFF) >>> 1) + ((checksum & 0x1) << 7)); // Rotate the accumulator
checksum = (byte) ((checksum + cur_byte) & 0xFF); // Add the next chunk
}
return checksum;
}
还有我的问题:
- 为什么我们在这一行使用按位 & checksum = (byte) ((checksum + cur_byte) & 0xFF); ? 0xFF 是二进制“11111111”,这个操作不总是返回这个相同的数字吗?
- 这个操作有什么意义?校验和 = (字节) (((校验和 & 0xFF) >>> 1) + ((校验和 & 0x1)
感谢您的帮助:)
【问题讨论】: