奕成则成 2023-01-25 09: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 10: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月1日
  • 已采纳回答 1月25日
  • 创建了问题 1月25日

悬赏问题

  • ¥15 PADS Logic 原理图
  • ¥15 PADS Logic 图标
  • ¥15 电脑和power bi环境都是英文如何将日期层次结构转换成英文
  • ¥20 气象站点数据求取中~
  • ¥15 如何获取APP内弹出的网址链接
  • ¥15 wifi 图标不见了 不知道怎么办 上不了网 变成小地球了
手机看
程序员都在用的中文IT技术交流社区

程序员都在用的中文IT技术交流社区

专业的中文 IT 技术社区,与千万技术人共成长

专业的中文 IT 技术社区,与千万技术人共成长

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

客服 返回
顶部