微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

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

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');
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。