在c语言中将浮点负值转换为整数值

在c语言中将浮点负值转换为整数值,c,C,我想将float负值转换为unsigned int值。可能吗 例如: float x = -10000.0; int y; y = x; 当我们将x值赋给y时,负值可以存储在整数中吗? 如果不是,我们如何将负值存储到整数变量中 负(float f)值能否存储在整数中 是的,有限制 union { float f; unsigned u; } x; 对于有符号整数类型,如int16\u t i,i=f是为 -32768.999... to 32767.999... -0.999..

我想将
float
负值转换为
unsigned int
值。可能吗

例如:

float x = -10000.0;
int y;
y = x;
当我们将x值赋给y时,负值可以存储在整数中吗? 如果不是,我们如何将负值存储到整数变量中

负(
float f
)值能否存储在整数中

是的,有限制

union {
  float f;
  unsigned u;
} x;

对于有符号整数类型,如
int16\u t i
i=f
是为

-32768.999... to 32767.999...
-0.999... to 65535.999...
对于像
unt16\u t u
这样的无符号整数类型,
u=f

-32768.999... to 32767.999...
-0.999... to 65535.999...
结果是一个截断值(丢弃的分数)。所有其他
float
值都会导致未定义的行为

如果不是,我们如何将负值存储到整数变量中

最好使用宽符号整数类型并测试范围限制

union {
  float f;
  unsigned u;
} x;
在任何情况下,浮点值的部分都会丢失。
-0.5f
可以存储在
无符号的
中,但值变为
0u


下面执行一些简单的测试,以确保
y
在范围内

#include <limits.h>
float x = ...;
int y = 0;

if (x >= INT_MAX + 1u) puts("Too pos");
else if (x <= INT_MIN - 1.0) puts("Too neg");
else y = (int) x;

另一种选择是探索
联合体
。让其他人来解释它的可能性和局限性

union {
  float f;
  unsigned u;
} x;

不清楚您使用的是
int
还是
unsigned int
,或者您希望
-10000.0
存储为什么无符号值。您可以将
float
值存储在所使用的整数类型的范围内。您的第一句话说要将值存储在
无符号int
中。显示用于演示此操作的代码将值存储在
int
中。这不是在
无符号int
中存储值的示例。所以你的问题前后矛盾,也不清楚。编辑它以仅谈论
无符号整数
或仅谈论
整数
。在任何情况下,
unsigned int
都不会包含负值。为什么
x+0.5
?注
(int)(x+0.5)
x<0
时不舍入到最近值。