c - 这些 C 运算符是什么意思?

标签 c operators

我正在阅读“编程挑战:编程竞赛培训手册”一书,并且正在实现一个我不理解运算符 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/

相关文章:

带有 block /proc/lambda 的 Ruby 双管道分配?

java - java中从double到int可能出现的有损转换错误

php - 同时对 2 个变量使用连接赋值运算符

c - 从 FAT12 查找可用软盘空间

C : Working with structures and pointers , 错误:一元 ‘*’ 的无效类型参数

c - 在玩具示例中使用 '\0' 进行 memset 的必要性

javascript - Jquery - if 语句中的运算符

c - 数字左移-1的值是多少

c - 如何执行结构的指针变量的内存设置,该结构是 C 中另一个结构的指针变量

c - 该程序的返回值为。 。 。 .至少可以说很奇怪