c中整数的除法运算方向

时间:2012-07-07 14:21:59

标签: c

下面给出的代码输出是否取决于编译器,或者保证所有编译器的输出都相同?

int main()
{ 
    int i=5;
    i=i/3;
    printf("%d\n",i);
    return 0;
}

2 个答案:

答案 0 :(得分:1)

是的,您的示例的行为定义明确。

然而,在负值的情况下,它不太清楚。在C99之前,无论整数除法是向零舍入还是向负无穷大舍入,都留作实现定义:

  

如果任一操作数为负数,则是否为   /运算符的结果是小于的最大整数   代数商或大于代数的最小整数   商是实现定义的

C99要求向零舍入:

  

当整数被分割时,/运算符的结果是任意的代数商   分数部分丢弃..

答案 1 :(得分:1)

The C99 standard,第6.5.5节,第6段:

  

当整数被分割时,/运算符的结果是   任何小数部分丢弃的代数商。如果   商a / b是可表示的,表达式(a / b)* b + a%b应为   等于a。

该标准还指出,这通常被称为“截断为零”。

是的,它定义明确。