【发布时间】:2021-12-21 08:25:33
【问题描述】:
所以下面是一些我用来理解如何在 C 中获取 double 的二进制文件的代码,但是代码的某些区域对我来说没有意义,我尝试使用 print 语句来帮助我,但是无济于事
#include <stdio.h>
#include <string.h>
#include <limits.h>
void double_to_bits(double val);
int main(void)
{
unsigned idx;
double vals[] = { 10 };
for (idx = 0; idx < 4; idx++ ) {
printf("\nvals[%u]= %+lf-->>", idx, vals[idx] );
double_to_bits(vals[idx] );
}
printf("\n");
return 0;
}
void double_to_bits(double val)
{
unsigned idx;
unsigned char arr[sizeof val];
memcpy (arr, &val, sizeof val);
printf("array is : %s\n", arr);
for (idx=CHAR_BIT * sizeof val; idx-- ; ) {
putc(
( arr[idx/CHAR_BIT] & (1u << (idx%CHAR_BIT) ) )
? '1'
: '0'
, stdout
);
}
}
arr[idx/CHAR_BIT] 返回什么?我知道如果 idx = 63 那么我们得到 arr[7] 但在打印语句中这些似乎只是给出随机整数值。
还有,为什么 arr[idx/CHAR_BIT] 和 (1u%CHAR_BIT) 之间的 & 操作数会给出 2 个奇怪的字符符号? & 操作数如何作用于这两个值?
感谢您的时间和帮助。
【问题讨论】: