при условии, что int в вашей системе имеет длину 32 бита, поэтому максимальное число, которое вы можете сохранить в currentPrinter, составляет 2 147 483 647, а минимальное - 2 147 483 648.причина, по которой вы получаете арифметическую ошибку, в основном вызвана делением на ноль, но причина, по которой вы получите деление на ноль, заключается в переполнении целых чисел.
если вы закроете nocopy с 64, цикл for будетВыполняется нормально до тех пор, пока я не достигну 30. В этот момент currentPrinter будет равен 1 073 741 824, умножение на это 2 приведет к значению 2 147 483 648, однако, поскольку это 32-разрядный тип int, максимальное число, которое мы можем иметь, составляет 2 147 483 647.и здесь начинается проблема.из-за переполнения int вместо 2 147 483 647 currentPrinter получит -2 147 483 648.после 31-й итерации все становится еще хуже.
во время 31-й итерации ваш currentPrinter снова пытается умножить -2 147 483 648 на 2, и это приводит к тому, что currentPrinter становится равным 0, что опять-таки связано с переполнением int.
Ваша 31-я итерация все еще в порядке.но на 32-й итерации currentPrinter вызовет ошибку деления на ноль.следовательно, причина, по которой вы получаете ошибку деления на ноль.