1

scanf によって整数が登録されている場合、その数値は 2 の補数表現になると思います。その番号をprintfで取得できますか?多くのウェブサイトを検索しましたが、C 初心者向けのコードが見つかりませんでした...

4

2 に答える 2

0

浮動小数点数は 2 の補数ではなく、IEEE 754に格納されます。一部のバイナリ データのバイナリ表現を出力するには、まずhttps://stackoverflow.com/a/112956/1689451を参照してください。float をユニオンに入れて、単一バイトを抽出できます。

#include <stdio.h>      /* printf */
#include <string.h>     /* strcat */

// taken from https://stackoverflow.com/a/112956/1689451
const char *byte_to_binary(int x)
{
    static char b[9];
    b[0] = '\0';

    int z;
    for (z = 128; z > 0; z >>= 1)
    {
        strcat(b, ((x & z) == z) ? "1" : "0");
    }

    return b;
}

union {
  float f;
  unsigned char b[4];
} x;

x.f = 0.34;
for (int i = 0; i < 4; i++) {
  printf("%s", byte_to_binary(x.b[i]));
}

この例は試していません。おそらくコンパイルされませんが、正しい方向にヒントを与えるはずです。

于 2012-11-06T05:57:11.160 に答える
0

それがあなたの質問であれば、一般に「2の補数」または2進数を出力するcの標準はありません。そのタスクは個別に解決する必要があります。例えば。

for (i=0;i<32;i++) putc( '0'+((number >> (31-i)) & 1)); // またはローカル文字列にコピー

それ以外の場合は次scanf("%f", &my_float);のように印刷されますprintf("%f", my_float);

于 2012-11-06T05:57:38.897 に答える