为什么scanf("%i",a)不像0b101那样采用二进制?

mko*_*mko 5 c

我对二进制表达式感到困惑,比如0b10101:

#include <stdio.h>
int main(void) {
  int a,b;
  b = 0b101;
  scanf("%i",&a);
  printf("the value of a is %d\n", a);
  printf("the value of b is %d\n", b);
}
Run Code Online (Sandbox Code Playgroud)

当我输入时0b101,

输出给了我

the value of a is 0;
the value of b is 5;
Run Code Online (Sandbox Code Playgroud)

而不是应该是两个5.

有没有办法让scanf二进制输入?

AnT*_*AnT 12

标准C没有用于表示二进制表示法的特定符号前缀.仅支持十进制,八进制和十六进制.虽然0b前缀是针对C99提出的(并且被拒绝),但是在某些编译器中看到它的实现可能并不罕见.

即使你看到了0b一些具体的C语言实现的扩展(GCC?)支持的前缀,这将是相当令人惊讶的看到它被公认scanf%i格式说明,因为这将打破标准实现兼容.后者需要停止阅读b.

根据您的测试结果判断,虽然看起来编译器支持0b...整数文字,而标准库对它们一无所知.也许该库的文档有关于它的说法,就像一些扩展的非标准格式说明符/标志,scanf它使它识别0b...前缀.我在GCC文档中没有看到它.