Почему деление int в Java округляется до нуля? [дубликат] ⇐ JAVA

Программисты JAVA общаются здесь
Anonymous
Почему деление int в Java округляется до нуля? [дубликат]

Сообщение Anonymous »

Я обнаружил, что правило округления двух целых чисел в Java заключается в том, чтобы получить значение ближе к 0.
Это означает, что если вы разделите два положительных числа, вы получите " значение «пол», например 7/3=2.
И если вы разделите одно отрицательное значение на положительное (или наоборот), вы получите значение «потолка»: -7/3 = -2 .
Я ожидаю, что это будет либо минимальное, либо максимальное значение.
  • Есть это потому, что «негатив» оценивается после деления?
  • Это какое-то наследие по сравнению с C?
    < /li>
    Должен ли он оставаться совместимым с некоторой транзитивной операцией остатка (оператор %)?
    (т.е. (a+(a%b)/b = потолок(a/ b) и (a-(a%b)/b = Floor(a/b) )
В одном из комментариев содержится исчерпывающий ответ, который я искал: он указан в официальной документации Java: https://docs.oracle.com/javase/specs/jls /se23/html/jls-15.html#jls-15.17.2-200

Целое деление округляет в сторону 0.


Как уже отмечали многие люди: скорее всего, это происходит из C, который происходит от реализации процессором целочисленного деления.
Здесь описана норма C: https://stackoverflow.com/a/3604984/5190019, а также говорится, что C сделал это таким образом, потому что Фортран тоже сделал.
Связанный вопрос (Почему целочисленные div и mod округляются до нуля?) объясняет, как происходит обычное деление отрицательного числа: деление производится так, как если бы оба числа были положительными, а затем оно преобразуется в эквивалентное отрицательное число.
Изначально это, безусловно, происходит от самого простого способа выполнения целочисленного деления с помощью ЦП (с отрицательными числами с использованием представления «дополнения до двух»).

Подробнее здесь: https://stackoverflow.com/questions/791 ... ds-to-zero

Вернуться в «JAVA»