numeros - operações com números inteiros




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

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 realizadas 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]


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 de inteiros é 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


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).





integer-division