编译器警告(等级 1)C4319

“~”:将“type1”零扩展到更大的“type2”

~(按位求补)运算符的结果无符号,然后在转换为更大的类型时进行零扩展。

示例

在下面的示例中,~(a - 1) 是按 32 位无符号 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
}