1

我认为如果某个整数在 scanf 的寄存器中,那么该数字将以 2s 补码表示。我可以通过 printf 得到那个号码吗?我搜索了很多网站,但找不到 C 初学者的代码......

4

2 回答 2

0

浮点数不存储在 2 的补码中,而是存储在IEEE 754中。要打印一些二进制数据的二进制表示,首先请参阅https://stackoverflow.com/a/112956/1689451。您可以将浮点数放入联合中以提取单个字节:

#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

如果这是您的问题,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 回答