Как Java делает вычисления модуля с отрицательными числами? - PullRequest
87 голосов
/ 10 декабря 2010

Я неправильно делаю модуль? Потому что в Java -13 % 64 предполагается оценить до -13, но я получаю 51.

Ответы [ 14 ]

0 голосов
/ 14 апреля 2016

В соответствии с разделом 15.17.3 JLS «Операция остатка для операндов, которые являются целыми числами после двоичного числового преобразования, приводит к значению результата, так что (a / b) * b + (a% b) равно a. Этоидентичность сохраняется даже в частном случае, когда дивиденд является отрицательным целым числом наибольшей возможной величины для его типа, а делитель равен -1 (остаток равен 0). "

Надеюсь, что поможет.

0 голосов
/ 23 сентября 2015

В последних версиях Java вы получаете -13%64 = -13. В ответе всегда будет знак числителя.

0 голосов
/ 12 марта 2015

В моей версии Java JDK 1.8.0_05 -13% 64 = -13

вы можете попробовать -13- (int (-13/64)) другими словами, деление приведено к целому числу, чтобы избавиться от части дроби затем вычесть из числителя Таким образом, числитель (int (числитель / знаменатель)) должен давать правильный остаток и знак

0 голосов
/ 23 июня 2014

Я не думаю, что Java возвращает 51 в этом случае.Я запускаю Java 8 на Mac и получаю:

-13 % 64 = -13

Программа:

public class Test {
    public static void main(String[] args) {
        int i = -13;
        int j = 64;
        System.out.println(i % j);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...