hanianshao 发表于 2021-8-30 09:45:37

按位与

s1e35比赛安排问题,判断 num 是否为2的n次方时,那个按位与,假设输入的是2,if 判断的就是 (2 & 1),那答案不应该是1吗,执行下面语句,为什么没有执行
#include <stdio.h>

#define MAX_NUM 64

int schedule;

int arrange(int begin, int num);

int arrange(int begin, int num)
{
      int i, j;

      if (num == 2)
      {
                schedule = begin;
                schedule = begin + 1;
                schedule = begin + 1;
                schedule = begin;
                return 0;
      }

      arrange(begin, num/2);
      arrange(begin + num/2, num/2);

      for (i = begin + num/2; i < begin + num; i++)
      {
                for (j = num/2 + 1; j <= num; j++)
                {
                        schedule = schedule;
                }
      }

      for (i = begin; i < begin + num/2; i++)
      {
                for (j = num/2 + 1; j <= num; j++)
                {
                        schedule = schedule;
                }
      }
}

int main(void)
{
      int num, i, j;

      printf("请输入参赛的队伍数量:");
      scanf("%d", &num);

      // 检查num是否2的N次方
      // 注意,这里是&,不是&&
      // &是按位与操作,1&1==1,0&1==0,0&0 == 0
      if (num & num - 1)
      {
                printf("参数队伍的数量必须是2的N次方!\n");
                return -1;
      }

      arrange(1, num);

      printf("编 号");

      for (i = 1; i < num; i++)
      {
                printf("\t第%d天", i);
      }

      putchar('\n');

      for (i = 1; i <= num; i++)
      {
                for (j = 1; j <= num; j++)
                {
                        printf("%3d\t", schedule);
                }
                putchar('\n');
      }

      return 0;
}

人造人 发表于 2021-8-30 10:27:43

这可是与运算
2 -> 10b
1 -> 01b

10b & 01b == ?

hanianshao 发表于 2021-8-30 10:52:19

人造人 发表于 2021-8-30 10:27


这个怎么算呀,刚刚百度都没搜到

人造人 发表于 2021-8-30 11:25:58

hanianshao 发表于 2021-8-30 10:52
这个怎么算呀,刚刚百度都没搜到

这样竖着看

hanianshao 发表于 2021-8-31 09:03:24

人造人 发表于 2021-8-30 11:25
这样竖着看

啊,我明白了,谢谢hxd
页: [1]
查看完整版本: 按位与