Вот что вам не хватает: когда подписанный целочисленный примитивный тип (такой как short, int, long) получает приращение выше значащего значения, которое он может представлять, он пытается перевернуть свой битовый знак, который является самым левым битом, который является только предполагать d для обозначения знака числа. 1 в бите знака указывает отрицательное значение. Это явление называется целым переполнением.
Рассмотрите вымышленный трехбитовый тип данных с примитивным знаком (для сравнения длина Java составляет 64 бита). Он может представлять числа от -4 до 3.
3, самое большое положительное значение в 3-х битное число может представлять собой, выглядит следующим образом: 011
добавить 1 к 011, и вы получите: 100 (число часть перетекает в знаковой части)
десятичная версия 100 равна -4
Однако, когда вы сталкиваетесь с длительностью долготы, есть много цифр для подсчета, так что вот быстрый способ определить наибольшее число, определенное данным неубывающим (в данном случае факториал):
long n = 1;
while (factorial(n) > 0) {
System.out.println("factorial of " + n++ + " can fit in a long!");
}
Похоже, что это должен быть бесконечный цикл, но это не так; в конечном счете, factorial (n) будет возвращать отрицательный результат из-за переполнения целых чисел. Это даст вам следующий вывод:
factorial of 1 can fit in a long!
factorial of 2 can fit in a long!
factorial of 3 can fit in a long!
factorial of 4 can fit in a long!
factorial of 5 can fit in a long!
factorial of 6 can fit in a long!
factorial of 7 can fit in a long!
factorial of 8 can fit in a long!
factorial of 9 can fit in a long!
factorial of 10 can fit in a long!
factorial of 11 can fit in a long!
factorial of 12 can fit in a long!
factorial of 13 can fit in a long!
factorial of 14 can fit in a long!
factorial of 15 can fit in a long!
factorial of 16 can fit in a long!
factorial of 17 can fit in a long!
factorial of 18 can fit in a long!
factorial of 19 can fit in a long!
factorial of 20 can fit in a long!
Знаете ли вы что-нибудь о самом большом количестве и междунар может держать, и это ваша домашняя работа? –
Это не моя домашняя работа, это моя забавная работа :) (я выродка). Я бы никогда не просил о помощи, как это для моей домашней работы. Я ничего не знаю о самом большом количестве, которое может удерживать int. Я посмотрю это в документах. – Toby
@ dann.dev: Что такое 'int'? – SLaks