NDK- 将负双数转换为 uint32_t 得到零
NDK- convert a negative double number into uint32_t got zero
示例代码是这样的
{
uint32_t x;
double y;
y = -1; // any negative number;
x = (uint32_t)(y);
print_log("%u", x);// here, x will be outputed, and it's 0;
}
为什么x会是0?
我运行同样的代码在linux-gcc中,结果不一样
double
值 -1.0
超出了 uint32_t
的范围。
将有符号或无符号整数值转换为无符号整数类型具有明确定义的行为。结果被包装到目标类型的范围内(减少模 MAX+1,其中 MAX 是目标类型的最大值)。
将超出范围的浮点值转换为整数类型具有未定义的行为。结果因系统而异也就不足为奇了。原则上,它甚至可能使您的程序崩溃。
一旦您决定了给定输入 -1.0
的结果,您就可以弄清楚如何在没有未定义行为的情况下生成该结果。
示例代码是这样的
{
uint32_t x;
double y;
y = -1; // any negative number;
x = (uint32_t)(y);
print_log("%u", x);// here, x will be outputed, and it's 0;
}
为什么x会是0?
我运行同样的代码在linux-gcc中,结果不一样
double
值 -1.0
超出了 uint32_t
的范围。
将有符号或无符号整数值转换为无符号整数类型具有明确定义的行为。结果被包装到目标类型的范围内(减少模 MAX+1,其中 MAX 是目标类型的最大值)。
将超出范围的浮点值转换为整数类型具有未定义的行为。结果因系统而异也就不足为奇了。原则上,它甚至可能使您的程序崩溃。
一旦您决定了给定输入 -1.0
的结果,您就可以弄清楚如何在没有未定义行为的情况下生成该结果。