] 从键盘上输入一个无符号整数,判断其中第1位和第4位的二进制数字是否为1,应该怎样做?

] 从键盘上输入一个无符号整数,判断其中第1位和第4位的二进制数字是否为1,应该怎样做?

#include <stdio.h>

int main(void)
{
    unsigned int num;
    int bit1, bit4;

    printf("Enter an unsigned integer: ");
    scanf("%u", &num);

    bit1 = (num >> 31) & 1;
    bit4 = (num >> 28) & 1;

    if (bit1 && bit4)
    {
        printf("The first and fourth bits are 1\n");
    }
    else
    {
        printf("The first and fourth bits are not both 1\n");
    }

    return 0;
}

首先,使用 scanf() 函数从键盘上读取一个无符号整数。然后,我们可以按位检查第1位和第4位的二进制数字是否为1。对于第1位,我们可以向右移动31位(即对应于最高位的位数),然后通过 & 1 操作获取其值。对于第4位,我们可以向右移动28位(即对应于第4位的位数),然后通过 & 1 操作获取其值。最后,我们可以检查这两个位是否都为1,并按照结果输出相应的信息。

  • 帮你找了个相似的问题, 你可以看下: https://ask.csdn.net/questions/1065178
  • 这篇博客你也可以参考下:输入一个十进制整数,将其转换为二进制后存储在一个数组中(可转换为任意进制)
  • 除此之外, 这篇博客: 二叉树的递归算法(先序,中序,后序)以及结点数,叶子结点数和深度,树的深度中的 中序遍历非递归算法 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 二叉树中序遍历的非递归算法的关键: 在中序遍历过某结点的整个左子树后,如何找到该结点的根以及右子树。

    基本思想:

    (1) 建立一个栈 (2)根结点进栈,遍历左子树 (3)根结点出栈,输出根结点,遍历右子树。

    参考王卓老师p50,算法5.2:https://www.bilibili.com/video/BV1nJ411V7bd?p=90

    栈的存储结构的建立

    typedef struct{
        int *base;  //栈底指针
        int *top;   //栈顶指针
        int stacksize;  //栈可用最大容量
    }SqStack;
    SqStack S;

    顺序栈的初始化操作:构造一个空栈

    int InitStack(SqStack &S){  //构造一个空栈
        S.base=new int[MAXSIZE];    //或S.base=(int*)malloc(MAXSIZE*sizeof(int));
        if(!S.base) exit(FALSE); //存储分配失败
        S.top=S.base;   //栈顶指针等于栈底指针
        S.stacksize=MAXSIZE;
        return OK;
    }

    判断顺序栈是否为空

    int StackEmpty(SqStack S){  //若栈为空,返回TURE,否则返回FALSE
        if(S.top==S.base)
            return TRUE;
        else
            return FALSE;
    }

    顺序栈的入栈

    int Push(SqStack &S,int e){
        if(S.top-S.base==S.stacksize) return ERROR; //栈满
        *S.top++=e; //*S.top=e; S.top++;
        return OK;
    }

    顺序栈的出栈

    int Pop(SqStack &S,int &e){     //出栈操作:删除S的站点元素An,并用e返回其值
        if(S.top==S.base) return ERROR; //若栈不空,则删除S的栈顶元素,用e返回其值,并返回OK;否则返回ERROR
        e=*--S.top;     //--S.top; e=*S.top;
        return OK;
    }

    算法实现

    int InOrderTraverse_no(BiTree T) {
        BiTree p, q;
        InitStack(S);
        p = T;
        while (p || !StackEmpty(S)) {
            if (p) {
                Push(S, p->data);
                p = p->lchild;
            } else {
                Pop(S, q->data);
                printf("%c", q->data);
                p = q->rchild;
            }
        }
        return OK;
    }

  • 您还可以看一下 孙伟老师的【孙伟】新手必看的设计思维与绘图制作视频教程课程中的 1案例介绍与设计思路小节, 巩固相关知识点