[英]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
非零别的分配1
到r
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.