将 double/float 向下转型为 uint8_t

问题描述 投票:0回答:1

假设我有以下代码,它尝试将 double 值“向下转换”为 uint8_t:

uint8_t downcast(uint8_t *down1, uint8_t *down2)
{
    //the usual nullptr checks
    double fval = 100.0; //fits the uint8_t domain range
    *down1 = (uint8_t)fval;  //should work...

    fval = 1000.0; //does not fit uint8_t domain range
    *down2 = (uint8_t)fval;  //will this work??
}

我看过一些建议进行这种“量化转换”的帖子,但我不确定这是否正确。我似乎记得读过,其值超出输出域的 double var 将导致强制转换(C 或 static_cast(fval))

产生未定义的行为

想法?谢谢,查尔斯。

c
1个回答
0
投票

第二次演员的行为未定义。

C23 §6.3.1.4 ¶1 当标准浮点类型的有限值转换为 bool 以外的整数类型时,小数部分将被丢弃(即该值被截断为零)。如果整数部分的值不能用整数类型表示,则行为未定义。

© www.soinside.com 2019 - 2024. All rights reserved.