我对一元运算符如何在 C 中用于补码、逻辑否定和预递增感到困惑。
一个补码对 0 起作用,如下所示:
int main()
{
int a;
a = ~0; // Ones complement
printf("%d",a); // prints as -1.
}
逻辑否定对 0 起作用,如下所示:
int main()
{
int a;
a = !0; // Logical negation
printf("%d",a); // prints as 1.
}
但是 Preincrement against 0 会产生编译器错误:
int main()
{
int a;
a = ++0; //pre incrementing 0. error: non-lvalue in increment
printf("%d",a);
}
考虑到它们都是一元运算符,为什么这三个都不工作?