У меня есть задача в школе, где я должен ответить на этот вопрос:Как обрабатывать переполнение INT на ограниченных устройствах памяти (на любом языке)?
«Несколько учеников составляют программу календаря, где дни« абсолютный дневной номер »определяется как количество дней с 1 января года 0 до текущий день. На многих небольших компьютерах максимальное значение для Int составляет 32767. Что может случиться, если мы не будем этого делать? Как вы можете решить эту проблему? "
Вопрос типа меня смущает. В настоящее время я работаю на Python и из того, что я прочитал. Python автоматически обрабатывает переполнения Int, преобразовывая Int в Long, а другие языки программирования выполняют аналогичные вещи (например, обертывая отрицательное число, AKA 32768 становится -32767). Если языки программирования не автоматически обрабатывали переполнения, я бы предположил, что вы просто получите ошибку, если число переместится через 32767 ... правильно?
Если вы хотите напечатать «абсолютный дневной номер» (при условии, что он превышает 32767, и вы можете использовать только Int), вы не сможете, потому что вы не можете сохранить значение в Int. Это было бы невозможно. Если вы хотите просто распечатать сегодняшнюю дату, вы можете просто взять ее с ПК или использовать время Unix.
Для меня кажется, что ответ на этот вопрос зависит от того, что именно вы хотите, чтобы программа выполняла. Но мой учитель говорит «нет». Он говорит, что ни один из моих ответов не верен. Я не совсем понимаю, какой ответ он хочет, и это должно быть легким вопросом, так как я только программировал около 2 месяцев. Что мне не хватает, что так очевидно? Могу ли я это переусердствовать?
'if variable> 32768: raise OverflowError'? – MaxLunar
Используйте переменную большой емкости, такую как * unsigned int *, 'uint32_t',' uint64_t', 'int32_t' или' int64_t'. На ассемблере вы можете протестировать бит переноса или переполнения после сложения или умножения. –
Другим методом является использование более одного 'int' для создания целочисленного целого. –