Я передал следующий код через инструмент статического анализа:
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
«ОК» означает, что инструмент статического анализа не жаловался.
«НЕ ОК» означает, что инструмент статического анализа действительно жаловался - утверждая, что некоторый операнд побитовой операции не является целым числом без знака.
Результаты последних двух строк показывают, что скобки вызывают либо
а. фактическое преобразование типа в подписанное
б. то, что инструмент статического анализа считает преобразованием типа в подписанное
Я спрошу разработчика инструмента статического анализа о (b).
Но прежде чем я это сделаю, я хотел бы знать, если, возможно, язык C известен как (а)?