xxxxxxxxxx
00101001 1st bit of subunit 1 is damaged
10111001 1st bit of subunit 2 is damaged
00011101 checksum
11111111 sum
00000000 Ok 1's complement
A checksum is a string of characters consisting of numbers and letters. It acts as a fingerprint for files and messages and is used to ensure the file or message you have received is genuine and error free. To do so, you create a checksum of the file you have received and compare it to the checksum of the source file. Even the most minor of changes will result in a completely different checksum.
For the scope of this course, we will be generating a checksum of a string.
The ChecksumAccumulator Class
The ChecksumAccumulator class has a single private field value sum, which is initialized to 0. It further has two methods, namely add, which is adding the bytes of a string, and checksum which is calculating the final checksum. checksum first uses the bitwise operator & with the final sum and the hexadecimal 0xFF. It then takes the result of the & operator and applies another bitwise operator to it ~. Finally, it adds a 1 to the result of the ~ operator, resulting in the final checksum value.
xxxxxxxxxx
class ChecksumAccumulator {
private var sum = 0
def add(b: Byte) = sum += b
def checksum() = ~(sum & 0xFF) + 1
}