5

我对二进制表达式感到困惑,例如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);
}

当我打字时0b101

输出给了我

the value of a is 0;
the value of b is 5;

而不是应该的两个 5。

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

4

1 回答 1

13

标准 C 没有用于表示二进制符号的特定符号前缀。仅支持十进制、八进制和十六进制。尽管该0b前缀是为 C99 提出的(并被拒绝),但在某些编译器中实现它可能并不罕见。

即使您看到0b某些特定 C 实现支持的前缀作为扩展(GCC?),看到它被scanf%i格式说明符识别也是相当令人惊讶的,因为它会破坏与标准实现的兼容性。后者必须在 停止阅读b

从您的测试结果来看,尽管编译器似乎支持0b...整数文字,而标准库对它们一无所知。也许该库的文档对此有话要说,例如一些扩展的非标准格式说明符/标志scanf,使其能够识别0b...前缀。不过,我在 GCC 文档中看不到它。

于 2012-07-22T04:59:54.033 回答