Мне нужно сложить все байты в байтовом массиве, состоящем только из символов ASCII, используя двоичное сложение с дополнением, сохраняя результат в виде одной байтовой контрольной суммы.
Я пытаюсь начать с основвыясняя, как добавить всего 2 байта вместе, но понятия не имею, как «обернуть», если при добавлении двух двоичных значений есть дополнительный бит.
Я создал программу-тестер, чтобы я мог игратьвокруг с разными ценностями.В приведенном ниже примере я пытаюсь добавить два двоичных числа, каждое из которых представляет десятичное значение 255.
byte b1 = (byte) 255;
String s1 = String.format("%8s",Integer.toBinaryString(b1 & 0xFF)).replace(' ', '0');
System.out.println("byte 1: " + s1); // 1111111
byte b2 = (byte) 255;
String s2 = String.format("%8s",Integer.toBinaryString(b2 & 0xFF)).replace(' ', '0');
System.out.println("byte 2: " + s2); // 1111111
byte sum = 0;
sum += b1;
sum += b2;
String s3 = String.format("%8s", Integer.toBinaryString(sum & 0xFF)).replace(' ', '0');
System.out.println("sum of byte 1 and byte 2: " + s3); // should be 1111111
Я ожидал, что результат будет:
байт 1: 11111111
байт2: 11111111
сумма байта 1 и байта 2: 11111111
, но фактический вывод:
байт 1: 11111111
байт 2: 11111111
сумма байтов1 и байт 2: 11111110
Как обернуть лишний бит, чтобы получить правильный результат?