繁体   English   中英

C:x =!y是什么意思?

[英]C: What does x = !y mean?

我正在阅读C语言中加泰罗尼亚语数字算法的代码,发现那句话我不太明白。 这是(递归):

typedef unsigned long long ull;

ull catalan2(int n) {
int i;
ull r = !n;

for (i = 0; i < n; i++)
    r += catalan2(i) * catalan2(n - 1 - i);
return r;
}

有人可以告诉ma短语r =!n在这里引起什么吗?

先感谢您!

这个:

ull r = !n;

等效于此:

ull r;
if (n == 0)
    r = 1;
else
    r = 0;

没有分支的一种棘手的方法:

#include <limits.h>
...
ull r = 1-((unsigned)(n|(-n))>>(sizeof(n)*CHAR_BIT-1));

x =!y表示“将y评估为布尔值并返回相反的布尔值”

因此,如果y为零,则它为false,我们返回一个真值(即1)。 否则,y为true,我们返回零。

ull r = !n; 等于ull r = n == 0 ? 1 : 0; ull r = n == 0 ? 1 : 0; n == 0时,它说明了空树; for循环计数非空树。

r != n意味着:分配0如果n非零别的分配1r

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM