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

时间:2014-10-13 20:40:52

标签: c algorithm recursion numbers

我正在阅读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;
}

有人可以告诉我这句话是什么     r =!n 在这里负责?

提前谢谢!

4 个答案:

答案 0 :(得分:2)

此:

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));

答案 1 :(得分:1)

x =!y表示&#34;将y评估为布尔值并返回相反的布尔值&#34;

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

答案 2 :(得分:1)

ull r = !n;相当于ull r = n == 0 ? 1 : 0;。当n == 0时,它会考虑空树。 for循环计算非空树。

答案 3 :(得分:0)

r != n表示:如果0为非零,则分配n,否则将1分配给r