在参考C99标准 6.3.1.4 Real floating和integer 时,我发现了以下关于在float到整数类型之间转换时可能的未定义行为的解释。
如果整数部分的值不能用整数类型表示,则行为是未定义的
我对此有以下问题。以下哪个条件归类为未定义的行为
答案 0 :(得分:3)
如果要转换为范围为[TYPE_MIN,TYPE_MAX]的有符号整数类型,则如果浮点源值不在开放区间(TYPE_MIN-1,TYPE_MAX + 1)中,则行为未定义。
如果要转换为范围为[0,UTYPE_MAX]的无符号整数类型,则如果浮点源值不在开放区间(-1,UTYPE_MAX + 1)中,则行为未定义。< / p>
所以,是的,你的两个条件都会产生未定义的行为(只要你认为-0.5
的组成部分没有负面的签名)。