Я реализую 2D код корреляции с нуля и у меня есть простая матрица 3x3 изображений типа неподписанного символа:Отрицательных числа типа неподписанного символа
unsigned char Image = [184 0 35
48 107 193
29 166 32]
Моего корреляционного ядро
Kernel = [-1 0 1]
Теперь, когда Я выполняю корреляцию, результат из первой строки равен -149 математически, но напечатанный результат равен 107 (дополнение 2).
unsigned char res = -1.F *(Kernel[i-1]) + (Kernel[i+1]);
Не правда ли, что это ошибка? Как сохранить результат как -149, но тип по-прежнему остается неизменным? Я знаю, что мой вопрос может быть нецелесообразным, так как диапазон unsigned char равен 0 - 255, но я хотел убедиться, что у меня что-то не хватает. Я также знаю, что отрицательные числа преобразуются в дополнение к 2.
BTW, это не домашнее задание, я просто работаю над C/C++ с точки зрения обработки изображений.
-149 не может быть представлен на 'char'. 'char' ограничен диапазоном -128 .. + 127. Используйте 'int' вместо' unsigned char'. –
184 - это int (подпись), -1 - int, умножение - int, затем преобразование и понижение до уровня, равного 107 –
. Я не понимаю ваш вопрос. Если вам нужно отрицательное значение, то, очевидно, вы не можете сохранить его в неподписанном типе. Использовать подписанный тип (например, 'int', поскольку' char' также не будет достаточно большим). – interjay