unsigned char a, b;
b = something();
a = ~b;
Статический анализатор пожаловался на усечение в последней строке, предположительно потому, что b
повышается до int до того, как его биты будут перевернуты, и результат будет иметь тип int.
Меня интересует только последний байт повышенного int - если b
был 0x55, мне нужно, чтобы a
было 0xAA. Мой вопрос: говорит ли спецификация C что-нибудь о том, как происходит усечение , или это реализация определена / не определена? Гарантируется ли, что a
всегда будет получать значение, которое я ожидаю, или что-то может пойти не так на соответствующей платформе?
Конечно, приведение результата перед назначением отключит статический анализатор, но я хочу знать, можно ли вообще игнорировать это предупреждение.