编译器警告(等级 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
}