我只是在修改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。