Вы потерпите неудачу при компиляции для нескольких платформ, потому что стандарт C ++ не определяет char
, чтобы иметь определенную "подпись".
Поэтому GCC вводит опции -fsigned-char
и -funsigned-char
длязаставить определенное поведение.Более подробную информацию по этой теме можно найти, например, здесь .
РЕДАКТИРОВАТЬ:
Как вы просили привести примеры неработающего кода, существует множествоо возможностях взломать код, который обрабатывает двоичные данные.Например, изображение обрабатывает 8-битные аудиосэмплы (диапазон от -128 до 127), и вы хотите уменьшить громкость вдвое.Теперь представьте себе этот сценарий (в котором наивный программист предполагает char == signed char
):
char sampleIn;
// If the sample is -1 (= almost silent), and the compiler treats char as unsigned,
// then the value of 'sampleIn' will be 255
read_one_byte_sample(&sampleIn);
// Ok, halven the volume. The value will be 127!
char sampleOut = sampleOut / 2;
// And write the processed sample to the output file, for example.
// (unsigned char)127 has the exact same bit pattern as (signed char)127,
// so this will write a sample with the loudest volume!!
write_one_byte_sample_to_output_file(&sampleOut);
Надеюсь, вам понравился этот пример ;-) Но, честно говоря, я никогда не сталкивался с такими проблемами, дажекак начинающий, насколько я помню ...
Надеюсь, этого ответа достаточно для вас, внизу.Как насчет короткого комментария?