我被要求将浮点数转换成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);

C++相关问答推荐

带双指针的2D数组

DPDK-DumpCap不捕获端口上的传入数据包

自定义应用程序上的日志(log)轮换问题

核心转储文件中出现奇怪的大小变化

是否所有C编译器在将浮点数转换为整型数时都会隐式删除小数?

如何使用[BTStack]BLE发送大型(>;2kb)信息包

在循环中复制与删除相同条件代码的性能

getline()从c中的外部函数传递指针时输出null

RawMotion的XInput2错误(具有较高值的XISelectEvents上的BadValue)

如何在POSIX-UEFI中获得输入?

Boyer Moore算法的简单版本中的未定义行为

不同原型的危险C函数是可能的

如何确保我将使用C标准库函数的函数版本,如&getc";,而不是类似函数的宏版本?

如何逐位读取二进制文件?

C编译和运行

正在try 理解C++中的`正在释放的指针未被分配‘错误

在下面的C程序中,.Ap0是如何解释的?

将size_t分配给off_t会产生符号转换错误

10 个字节对于这个 C 程序返回后跳行的能力有什么意义

无法在 C 中打开文本文件,我想从中读取文本作为数据并将其写入数组