Я загрузил следующий код с помощью инструмента статического анализа:
u1 = (u1 ^ u2); // OK
u1 = (u1 ^ u2) & u3; // NOT OK
u1 = (u1 ^ u2) & 10; // NOT OK
u1 = (u1 ^ u2) & 10U; // NOT OK
u1 = (unsigned char)(u1 ^ u2) & 10U; // OK
u1 = (unsigned char)(u1 ^ u2) & u3; // OK
«ОК» означает, что инструмент статического анализа не жаловался. «НЕ ОК» означает, что инструмент статического анализа пожаловался, заявив, что некоторый операнд поразрядной операции не является целым числом без знака.
Результаты последних двух строк показывают, что круглые скобки вызывают либо
а. фактическое преобразование типа в подписанный
б. то, что инструмент статического анализа считает преобразованием типа в подписанный
Я спрошу разработчика инструмента статического анализа о (б).
Но прежде чем я это сделаю, я хотел бы знать, возможно ли, что язык C выполняет (а)?