Вот это побитовое и
array[buffer[i]&0b1111_1111]++;
превращает -128 в 128, -127 в 129 А 0,1,2, 3 не меняет. Такую операцию мы проделываем, потому что мы читает из файла в том числе отрицательные байты, а для подсчета используем массив, где не может быть отрицательных индексов. Но по условию задачи нам надо вывести не положительный integer, полученный строкой array[buffer[i]&0b1111_1111]++; А нужно вывести байт, то есть нужно провести обратную операцию. Как её элегантно записать? Потому что всё что я пытаюсь записать, например:
i3 = i2|0b11111111_11111111_11111111_0000_0000;
Корректно отрабатывает на отрицательных байтах, но косячит на положительных