int bar(int *arr, size_t n)
{
int sum = 0, i;
for (i = n; i > 0; i--)
{
sum += !arr[i - 1];
}
return ~sum + 1;
}
我遇到了这段代码,但不太明白 sum += !arr[i - 1];
:在数组指针上应用!(NOT)的效果是什么?此外,在 sum
前面加上 ~ 的效果是什么?
int bar(int *arr, size_t n)
{
int sum = 0, i;
for (i = n; i > 0; i--)
{
sum += !arr[i - 1];
}
return ~sum + 1;
}
我遇到了这段代码,但不太明白 sum += !arr[i - 1];
:在数组指针上应用!(NOT)的效果是什么?此外,在 sum
前面加上 ~ 的效果是什么?
sum += !arr[i - 1];
!
是逻辑非运算符。它不作用于指针,而是作用于值arr[i-1]
上。如果arr[i-1] ==0
,结果为1
,否则结果为0
。
~sum + 1;
~
是按位取反运算符。它会倒置sum
的所有二进制位。有时也称为一补数运算。
~sum+1
的结果相当于对sum
取二进制补码,这等于sum
的负数。如果sum
是5
,它将返回-5
。0
还是非 0
。非零可以取任何值,如5、10、-5
等。!0
,则会得到1的值。对于其他任何值,例如!5
,答案都是0。逻辑否定运算符!的结果是0,如果其操作数的值不等于0,则为1,如果其操作数的值等于0,则为1。结果具有int类型。表达式! E等效于(0==E)