我被要求将浮点数转换成32位无符号整数.然后我必须判断所有的位是否为零,但我遇到了问题.对不起,我是C的新手
这就是我正在做的
float number = 12.5;
// copying number into a 32-bit unsigned int
unsigned int val_number = *((unsigned int*) &number);
在这一点上,我很困惑如何判断所有位是否为零.
我想我需要把所有的部分循环一遍,但我不知道怎么做.
我被要求将浮点数转换成32位无符号整数.然后我必须判断所有的位是否为零,但我遇到了问题.对不起,我是C的新手
这就是我正在做的
float number = 12.5;
// copying number into a 32-bit unsigned int
unsigned int val_number = *((unsigned int*) &number);
在这一点上,我很困惑如何判断所有位是否为零.
我想我需要把所有的部分循环一遍,但我不知道怎么做.
要将32位float
的字节复制到整数,最好复制到一个肯定是32位的整数类型.unsigned
可以小于、等于或大于32位.
#include <inttypes.h>
float number = 12.5;
uint32_t val_number32; // 32-bit type
memcpy(&val_number32, &number, sizeof val_number32);
避开演员阵容,分配角色.这会导致现代编译器出现别名问题.
"…需要将a和b的地址强制转换为键入(unsigned int*),然后取消对地址的引用"反映了一种危险的编程技术.
要测试无符号整数的位是否都为零,只需使用常量0进行测试.
int bit_all_zero = (val_number32 == 0);
另一种方法是使用union
从两种不同的编码中访问字节.
union {
float val_f;
uint32_t val_u;
} x = { .val_f = 12.5f };
int bit_all_zero = (x.val_u == 0);