Усечение int до char - это определено?

unsigned char a, b;
b = something();
a = ~b;

Статический анализатор пожаловался на усечение в последней строке, предположительно потому, что b повышается до int до того, как его биты будут перевернуты, и результат будет иметь тип int.

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

Конечно, приведение результата перед назначением отключит статический анализатор, но я хочу знать, можно ли вообще игнорировать это предупреждение.

5
задан Amarghosh 4 May 2011 в 10:21
поделиться