静的分析ツールを介して次のコードをフィードしました。
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
「OK」は、静的分析ツールがエラーを出さなかったことを意味します。「NOT OK」は、静的分析ツールが不平を言ったことを意味します。つまり、ビット演算の一部のオペランドが符号なし整数ではないと主張しています。
最後の 2 行の結果は、括弧がどちらかを引き起こしていることを示しています。
a. signed への実際の型変換
b. 静的解析ツールが符号付きへの型変換であると考えるもの
(b)については静的解析ツールの開発者に聞いてみます。
しかし、その前に、おそらく C 言語が (a) を行うことが知られているかどうかを知りたいです。