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 写一个方法checkPerson,入参实体类Person,出参布尔值
  • ¥15 我想咨询一下路面纹理三维点云数据处理的一些问题,上传的坐标文件里是怎么对无序点进行编号的,以及xy坐标在处理的时候是进行整体模型分片处理的吗
  • ¥15 CSAPPattacklab
  • ¥15 一直显示正在等待HID—ISP
  • ¥15 Python turtle 画图
  • ¥15 关于大棚监测的pcb板设计
  • ¥15 stm32开发clion时遇到的编译问题
  • ¥15 lna设计 源简并电感型共源放大器
  • ¥15 如何用Labview在myRIO上做LCD显示?(语言-开发语言)
  • ¥15 Vue3地图和异步函数使用