我正在阅读“编程挑战:编程竞赛培训手册”一书,并且正在实现一个我不理解运算符 c>>1 的使用和比较 if (n&1) 的问题,有人可以帮助我知道他们的意思吗?
这是示例代码
#include <stdio.h>
#define MAX_N 300
#define MAX_D 150
long cache[MAX_N/2][2];
void make_cache(int n,int d,int mode)
{
long tmp[MAX_D];
int i,count;
for(i=0;i<MAX_D;i++) tmp[i]=0;
tmp[0]=1;count=0;
while(count<=n)
{
count++;
for(i=(count&1);i<=d;i+=2)
{
if(i)
tmp[i] = tmp[i-1] + tmp[i+1];
else if(!mode)
tmp[0]=tmp[1];
else
tmp[0]=0;
}
if((count&1)==(d&1))
cache[count>>1][mode]=tmp[d];
}
}
int main()
{
int n,d,i;
long sum;
while(1)
{
scanf("%d %d",&n,&d);
if(n&1)
sum=0;
else if(d==1)
sum=1;
else if(n<(d<<1))
sum=0;
else if(n==(d<<1))
sum=1;
else
{
make_cache(n,d,0);
make_cache(n,d,1);
sum=0;
for(i=0;i<=(n>>1);i++)
sum+=cache[i][0]*cache[(n>>1)-i][1];
}
printf("%ld\n",sum);
}
return 0;
}
最佳答案
>> 将位向右移动 n 位。所以这个:
1011 0101
向下移动 1 变为:
0101 1010
& 运算符执行按位和,因此再次采用:
1011 0101
& 你得到 1(这意味着两者都必须为 1,否则为 0):
1011 0101
&0000 0001
----------
0000 0001
希望这有助于回答您的问题!
关于c - 这些 C 运算符是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/948654/