在实数浮动和整数之间转换

时间:2014-01-25 14:41:32

标签: c

在参考C99标准 6.3.1.4 Real floating和integer 时,我发现了以下关于在float到整数类型之间转换时可能的未定义行为的解释。

  

如果整数部分的值不能用整数类型表示,则行为是未定义的

我对此有以下问题。以下哪个条件归类为未定义的行为

  1. 整数部分的签名和整数类型不同。
  2. 整数部分大于可由整数类型表示的MAX值。

1 个答案:

答案 0 :(得分:3)

如果要转换为范围为[TYPE_MIN,TYPE_MAX]的有符号整数类型,则如果浮点源值不在开放区间(TYPE_MIN-1,TYPE_MAX + 1)中,则行为未定义。

如果要转换为范围为[0,UTYPE_MAX]的无符号整数类型,则如果浮点源值不在开放区间(-1,UTYPE_MAX + 1)中,则行为未定义。< / p>

所以,是的,你的两个条件都会产生未定义的行为(只要你认为-0.5的组成部分没有负面的签名)。