#include <stdio.h>
int main(void) {
float flt = 1.116533e24f;
printf("%e\n", flt);
printf("%ld\n", (long)flt); /* wrong */
printf("%u\n", *(unsigned long * const)&flt); /* 将浮点数理解为整数 */
return 0;
}
/*
* 浮点数和整数强制类型转换的模拟测试
*/
#include <stdio.h>
typedef int int32_t;
typedef unsigned uint32_t;
typedef unsigned char uint8_t;
static int32_t float_to_int32(float flt) {
uint32_t ret;
uint8_t e;
ret = (*(uint32_t * const)&flt) & 0x007FFFFF; /* 取23位尾数 */
e = (uint8_t)((*(uint32_t * const)&flt) >> 23); /* 取8位阶码 */
if (ret == 0u) {
if (e == 0u)
return 0;
else if (e == 0xFF) {
puts("inf");
return 0xFFFFFFFF;
}
} else {
if (e ==