Неправильно думать, что неподписанный символ находится в диапазоне от 0 до 255. Это только его минимальный диапазон. символ должен иметь не менее 8 бит, а подписанный символ, неподписанный символ и сам символ могут действительно иметь более 8 бит. так что это означает, что беззнаковый символ может выходить за пределы 255. хотя по общему признанию, у меня нет реализации, в которой было бы больше 8 бит, это теоретически возможно. это указано в стандарте c89 (на котором основывается c ++ 03), документируя файл limit.h (CHAR_BIT, UCHAR_MAX, CHAR_MAX).