为什么我的位掩码程序不起作用?我如何重置/设置一点然后打印号码

问题描述

int main() {

    unsigned int nr,mask;

    printf("nr = ");   //for eg. if i use number 11111111 or 00111111 it prints 0. 
    scanf("%hu",&nr);

    if ((nr & 0b00001000) == 0)
        printf("0\n\n");
    else
        printf("1\n\n");

mask = 0b00001000;

    if (nr & mask)
        printf("1\n");
    else
        printf("0\n");

    printf("%x",nr);

    return 0;
}

我可以使用00001000 & nr(10101010)这样的掩码,将“ 1”放置在复位位置,以便第4位保持静止,但是再次无效(我不知道为什么)。但是我不知道如何在以后打印数字。

解决方法

scanf()没有读取二进制字符串的选项,因此您将必须读取为字符串并自己进行转换。

例如(省略错误检查):

char nr_str[128];
scanf("%127s",nr_str);
nr = 0;
for (int i = 0; nr_str[i] != '\0'; i++) {
    nr = (nr << 1) | (nr_str[i] - '0');
}