Nig*_* Ng 3 c boolean unary-function
int bar(int *arr, size_t n)
{
int sum = 0, i;
for (i = n; i > 0; i--)
{
sum += !arr[i - 1];
}
return ~sum + 1;
}
Run Code Online (Sandbox Code Playgroud)
我看过这段代码,但不太明白sum += !arr[i - 1];:!(NOT)应用于数组指针的作用是什么?另外,〜之前有sum什么作用?
sum += !arr[i - 1];
Run Code Online (Sandbox Code Playgroud)
该!是逻辑否定操作。正如您提到的,它不应用于指针,而是应用于value arr[i-1]。如果arr[i-1] ==0结果1否则为0。
~sum + 1;
Run Code Online (Sandbox Code Playgroud)
~是按位NOT运算符,它将反转的所有二进制位sum。有时也称为补码
的结果~sum +1与取的二的补数相同sum,等于和的负数。如果总和5将返回-5
关于逻辑运算符的更多说明
将逻辑运算符(逻辑AND,OR,NOT)应用于变量时,它仅检查变量的逻辑状态。即这是这是否是0或non 0不为零可以采取任何值,例如,5, 10, -5等等。
因此,如果应用,则!0 得到的值为1。对于其他任何值,例如!5答案为0。
从C99 6.5.3.5
逻辑否定运算符的结果!如果其操作数的值比较不等于0,则为0;如果其操作数的值比较等于0,则为1。结果的类型为int。表达式!E等效于(0 == E)
| 归档时间: |
|
| 查看次数: |
66 次 |
| 最近记录: |