Qual é o comportamento da divisão de números inteiros?

Por exemplo,

int result; result = 125/100; 

ou

 result = 43/100; 

O resultado será sempre o piso da divisão? Qual é o comportamento definido?

O resultado será sempre o piso da divisão? Qual é o comportamento definido?

Sim, quociente inteiro dos dois operandos.

6.5.5 Operadores multiplicativos

6 Quando inteiros são divididos, o resultado do operador / é o quociente algébrico com qualquer parte fracionária descartada. 88) Se o quociente a / b é representável, a expressão (a / b) * b + a% b será igual a.

e a nota de rodapé correspondente:

88) Isso é freqüentemente chamado de ” truncamento em direção a zero ”.

Claro que dois pontos a serem notados são:

3 As conversões aritméticas usuais são executadas nos operandos.

e:

5 O resultado do operador / é o quociente da divisão do primeiro operando pelo segundo; o resultado do operador% é o restante. Em ambas as operações, se o valor do segundo operando for zero, o comportamento é indefinido.

[Nota: ênfase minha]

Dirigentemente dá uma excelente descrição da divisão inteira em C99, mas você também deve saber que na divisão inteira C89 com um operando negativo tem uma direção definida pela implementação.

Do esboço do ANSI C (3.3.5):

Se um dos operandos for negativo, se o resultado do operador / é o maior inteiro menor que o quociente algébrico ou o menor inteiro maior que o quociente algébrico é definido pela implementação, assim como o sinal do resultado do operador%. Se o quociente a / b é representável, a expressão (a / b) * b + a% b será igual a.

Portanto, fique atento aos números negativos quando estiver preso a um compilador C89.

É um fato divertido que o C99 escolheu o truncamento em direção a zero porque foi assim que o FORTRAN fez isso. Veja esta mensagem em comp.std.c.

Onde o resultado é negativo, C trunca em direção a 0 em vez de em piso – Aprendi esta leitura sobre por que a divisão inteira de Python sempre aparece aqui: Por que os pisos de divisão de inteiro do Python

Sim, o resultado é sempre truncado em direção a zero. Ele irá arredondar para o menor valor absoluto.

 -5 / 2 = -2 5 / 2 = 2 

Para valores assinados não assinados e não negativos, este é o mesmo que floor (arredondado para -Infinity).

O resultado será sempre o piso da divisão?

Não. O resultado varia, mas a variação acontece apenas para valores negativos.

Qual é o comportamento definido?

Para deixar claro o piso arredonda para o infinito negativo, enquanto a divisão inteira é arredondada para zero (trunca)

Para valores positivos, eles são os mesmos

 int integerDivisionResultPositive= 125/100;//= 1 double flooringResultPositive= floor(125.0/100.0);//=1.0 

Para valor negativo, isso é diferente

 int integerDivisionResultNegative= -125/100;//=-1 double flooringResultNegative= floor(-125.0/100.0);//=-2.0