m0_74128289 2023-01-25 17:32 采纳率: 87.5%
浏览 21
已结题

使用位运算死循环了,还有十进制数可以直接右移么

按照这张图片,我的代码死循环了,第一次使用位运算,怎么修改

#include<stdio.h>
#include<stdlib.h>
#include<time.h>
int random(int min,int max)
{
    int r;
    do{ r=rand()%(max-min+1)+min;
    }while(r==3||(r<=9&&r>=6)||r==12);
    return r;
}
void toBinary(int m)
{
    int N,b=8;
    printf("M初始状态二进制表示:");
    while(b!=0)
    {
        N=m&b;
        if(N!=0)
            printf("1");
        else
            printf("0");
        b>>1;
    }printf("\n");
}
int main()
{
    int M,N,b;
    srand(time(NULL));
    M=random(0,15);
    printf("M初始状态十进制表示:%d\n",M);
    toBinary(M);
    return 0;
}


img

  • 写回答

2条回答 默认 最新

  • 社区专家-Monster-XH 2023-01-25 18:10
    关注

    回答不易,回答有用请你采纳,点击回答右侧采纳即可!
    代码中有一个错误,导致死循环,这是由于在您的 random 函数中的条件语句错误导致的。在 while 循环中,您限制了随机数必须不等于3,在6到9之间或者等于12。因此,如果随机数符合这些条件,则会一直循环下去。

    另外,在toBinary函数中,您可能想要将b右移1位,而不是b>>1;

    修改后的代码如下:

    #include<stdlib.h>
    #include<time.h>
    int random(int min,int max)
    {
        int r;
        do{ r=rand()%(max-min+1)+min;
        }while((r==3||(r>=6&&r<=9)||r==12));
        return r;
    }
    void toBinary(int m)
    {
        int N,b=8;
        printf("M初始状态二进制表示:");
        while(b!=0)
        {
            N=m&b;
            if(N!=0)
                printf("1");
            else
                printf("0");
            b>>=1;
        }printf("\n");
    }
    
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 2月2日
  • 已采纳回答 1月25日
  • 创建了问题 1月25日

悬赏问题

  • ¥15 phython路径名过长报错 不知道什么问题
  • ¥15 深度学习中模型转换该怎么实现
  • ¥15 HLs设计手写数字识别程序编译通不过
  • ¥15 Stata外部命令安装问题求帮助!
  • ¥15 从键盘随机输入A-H中的一串字符串,用七段数码管方法进行绘制。提交代码及运行截图。
  • ¥15 TYPCE母转母,插入认方向
  • ¥15 如何用python向钉钉机器人发送可以放大的图片?
  • ¥15 matlab(相关搜索:紧聚焦)
  • ¥15 基于51单片机的厨房煤气泄露检测报警系统设计
  • ¥15 Arduino无法同时连接多个hx711模块,如何解决?