code: protected final int calculateCRC32 (final long value) {
  
          long l = value;
          int register = 0;
          // We are going to throw the first bit away. Then making int from long.
          final int gxInt = (int) (generatorPolynom & BIN_MASK_33BIT);
  
          // the first bit before bit shifting in the input polynom
          int bit = 0;
  
          for (int i = 0; i < Long.SIZE; i++) {
              // is the highest bit set?
              if ((l & BIN_MASK_1FIRST_ONLY) == 0) {
                  bit = 0;
              } else {
                  bit = 1;
              }
  
              // is the highest bit set?
              if ((register & BIN_MASK_1FIRST_ONLY_INT) == 0) {
                  register = register << 1;
                  l = l << 1;
                  register += bit;
              } else {
                  register = register << 1;
                  l = l << 1;
                  register += bit;
                  register = register ^ gxInt;
              }
  
          }
  
          return Integer.reverse(register);
      }
docs: Method for CRC calculation for the just one value (type long) Algorithm: Load the register with zero bits.
  Reverse message Augment the message by appending W zero bits to the end of it. While (more message bits) Begin
  Shift the register left by one bit, reading the next bit of the augmented message into register bit position 0.
  If (a 1 bit popped out of the register during step 3) Register = Register XOR Poly. End Reverse register The
  register now contains the CRC. Notes: W=32, that's why we have offsets 32, 40, 48 and 56 instead of 0,8,16,24
  Size of register=W;
  
  @param value A <code>long</code> value, for which the CRC should be calculated.
  @return The remainder of the polynomial division --> CRC.