64位十进制转二进制
convert 64 bit decimal to binary
我想将 double num 转换为二进制,但尾数不起作用,我不知道为什么,这是代码...
请不要使用其他库(仅 stdio)
void printBinary(int n, int i)
{
int k;
for (k = i - 1; k >= 0; k--) {
if ((n >> k) & 1)
printf("1");
else
printf("0");
}
}
typedef union {
double f;
struct
{
unsigned long long mantissa : 52;
unsigned long long exponent : 11;
unsigned long long sign : 1;
} raw;
} myDouble;
void printIEEE(myDouble var)
{
printf("%d |", var.raw.sign);
printBinary(var.raw.exponent, 11);
printf(" | ");
printBinary(var.raw.mantissa, 52);
printf("\n");
}
然后我在 main
myDouble var;
var.f = -8.34;
printf("IEEE 754 representation of %f is : \n",
var.f);
printIEEE(var);
你的二进制打印函数是
void printBinary(int n, int i)
但您传递的是 unsigned long long
值。请将函数更改为
void printBinary(unsigned long long n, int i)
我想将 double num 转换为二进制,但尾数不起作用,我不知道为什么,这是代码... 请不要使用其他库(仅 stdio)
void printBinary(int n, int i)
{
int k;
for (k = i - 1; k >= 0; k--) {
if ((n >> k) & 1)
printf("1");
else
printf("0");
}
}
typedef union {
double f;
struct
{
unsigned long long mantissa : 52;
unsigned long long exponent : 11;
unsigned long long sign : 1;
} raw;
} myDouble;
void printIEEE(myDouble var)
{
printf("%d |", var.raw.sign);
printBinary(var.raw.exponent, 11);
printf(" | ");
printBinary(var.raw.mantissa, 52);
printf("\n");
}
然后我在 main
myDouble var;
var.f = -8.34;
printf("IEEE 754 representation of %f is : \n",
var.f);
printIEEE(var);
你的二进制打印函数是
void printBinary(int n, int i)
但您传递的是 unsigned long long
值。请将函数更改为
void printBinary(unsigned long long n, int i)