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;

あるべき2つの5の代わりに。

scanfバイナリ入力を取得する方法はありますか?

4

1 に答える 1

13

標準 C には、バイナリ表記を表すための特定の表記接頭辞がありません。10 進数、8 進数、16 進数のみがサポートされています。0bプレフィックスは C99 用に提案された (そして拒否された) ため、一部のコンパイラで実装されているのを見るのはおそらく珍しいことではありません。

プレフィックスが特定の C 実装で拡張 (GCC?) としてサポートされているのを見たとしても、標準実装との互換性が失われるため、のフォーマット指定子0bによって認識されるのはかなり驚くべきことです。後者は で読み取りを停止する必要があります。scanf%ib

テスト結果から判断すると、コンパイラは整数リテラルをサポートしているように見えますが0b...、標準ライブラリはそれらについて何も知りません。おそらく、そのライブラリのドキュメントには、プレフィックスscanfを認識させるための拡張された非標準のフォーマット指定子/フラグのように、それについて何か言いたいことがあります。0b...ただし、GCCドキュメントには表示されません。

于 2012-07-22T04:59:54.033 に答える