在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
时不舍入到最近值。