我只是在修改C概念,并正在编写一个用于检查设置位的程序。
我在以下代码段中写道:

#include <stdio.h>

int main(void) {
    unsigned char a, checkbit;
    scanf(" %c", &a);
    scanf(" %c", &checkbit);
    printf("%u\n", (a & (1 << checkbit)));
    if (a & (1 << checkbit))
        printf("bit is 1\n");
    else
        printf("bit is 0\n");

    return 0;
}


上面的程序总是给我“位为0”
将checkbit变量更改为int然后工作

#include <stdio.h>

int main(void) {
    unsigned char a;
    int checkbit;
    scanf(" %c", &a);
    scanf(" %d", &checkbit);
    printf("%u\n", (a & (1 << checkbit)));
    if (a & (1 << checkbit))
        printf("bit is 1\n");
    else
        printf("bit is 0\n");

    return 0;
}


有人可以告诉我第一程序有什么问题吗?

在这里也尝试过

online_gcc_compiler

同样的结果。

最佳答案

您需要使用%hhu来获取整数值而不是字符:

scanf(" %hhu", &checkbit);


您的代码当前存储了您在checkbit中输入的数字的ASCII(或您正在使用的其他任何字符集)表示形式。

请注意,这在Windows上不起作用。 MSVCRT不符合C99。

10-06 01:25