Java BSD校验和和和位操作说明

Java BSD校验和和和位操作说明,java,checksum,bsd,Java,Checksum,Bsd,我试图理解用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 = (by

我试图理解用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; 
字节校验和(字节[]输入){
字节校验和=0;
for(字节cur\u字节:输入){
校验和=(字节)((校验和&0xFF)>>>1)+(校验和&0x1)>>1)+(校验和&0x1)
  • b&0xFF通常用于将有符号字节转换为位相同的整数。在这种情况下,不需要-(byte)(b&0xFF)与(b)相同。例如((byte)-1)&0xFF=255

  • 12345678>>>1 01234567
    12345678