Вопрос

Например,

int result;

result = 125/100;

или

result = 43/100;

Результат всегда будет пол дивизии? Что такое определенное поведение?

Это было полезно?

Решение

Результат всегда будет пол дивизии? Что такое определенное поведение?

Да, целое число двух операндов.

6.5.5 Мультипликативные операторы

6 Когда целые числа делятся, результат / оператор / оператор является алгебраическим фактором с любой дробной частью отброшенной.88) Если фактор A / B представлен, выражение (A / B) * B + A% B должна равняться.

и соответствующая сноска:

88) Это часто называют «усечением к нулю».

Конечно, два пункта к примечанию:

3 Обычные арифметические преобразования выполняются на операндах.

а также:

5 Результат / оператор является частным из разделения первого операнда на второй; Результатом оператора% является остатком. В обеих операциях, если значение второго операнда равен нулю, поведение не определено.

Примечание: упор мой

Другие советы

Диркратно дает Отличное описание Целочисленного отдела в C99, но вы также должны знать, что в C89 целочисленное разделение с отрицательным операндом имеет определенное внедрение направление.

От проекта ANSI C (3.3.5):

Если операнд отрицателен, будь то результат / оператор / оператор наибольшим целым числом, меньше, чем алгебраический фактор или наименьшее целое число, превышающее, чем алгебраический фактор, определяется, как является признаком результата% оператора. Если фактор A / B представлен, выражение (A / B) * B + A% B должна равняться.

Так что следите за отрицательными числами, когда вы застряли с компилятором C89.

Забавный факт, что C99 выбрал усечение к нулю, потому что это было, как Фортран сделал это. Видеть это сообщение на комп.

Там, где результат негативно, C укорены к 0, а не на полу - я узнал, что это чтение о том, почему дивизион Python Integer всегда этажей здесь: Почему целочисленные деления Python

Да, результат всегда урезан к нулю. Он будет окружен к самой маленькой абсолютной ценности.

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

Для беззнаковных и неотрицательных подписанных значений это то же самое, что и пола (округление к -инфинсию).

Результат всегда будет пол дивизии?

Нет. Результат варьируется, но вариация происходит только для отрицательных значений.

Что такое определенное поведение?

Чтобы сделать его прозрачным напольными раундами к негативной бесконечности, в то время как целочисленное подразделение раундов к нулю (усеченные)

Для положительных ценностей они одинаковы

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

Для отрицательного значения это другое

int integerDivisionResultNegative= -125/100;//=-1
double flooringResultNegative= floor(-125.0/100.0);//=-2.0
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top