我对二进制表达式感到困惑,比如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文档中没有看到它.
| 归档时间: |
|
| 查看次数: |
8614 次 |
| 最近记录: |