コンパイラの警告 (レベル 1) C4319
'~': 'type1' からより大きいサイズの 'type2' へのゼロ拡張です
~ (ビットごとの補数) 演算子の結果は符号なしであるため、より大きい型に変換するとゼロ拡張になります。
例
次の例では、~(a - 1)
が 32 ビットの unsigned long 式として評価され、ゼロ拡張によって 64 ビットに変換されます。 これは、予期しない操作結果になる可能性があります。
// C4319.cpp
// compile with: cl /W4 C4319.cpp
int main() {
unsigned long a = 0;
unsigned long long q = 42;
q = q & ~(a - 1); // C4319 expected
}