我认为如果某个整数在scanf寄存器中,则该数字将以2s补码表示。我可以通过printf获得这个号码吗?我搜索了很多网站,但无法找到C初学者的代码......
答案 0 :(得分: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]));
}
我没有尝试这个例子;可能没有编译,但应该给出正确方向的提示。
答案 1 :(得分:0)
如果这是你的问题,那么c中没有标准可以打印“二进制”数字或二进制数字。该任务必须单独解决。例如
for (i=0;i<32;i++) putc( '0'+((number >> (31-i)) & 1));
//或复制到本地字符串
否则scanf("%f", &my_float);
会打印printf("%f", my_float);