Я что-то упустил? Насколько я могу судить по вашему вопросу, ваша проблема не имеет ничего общего с дополнением 2. Насколько я могу сказать, все, что вам нужно / нужно сделать, это
use Math::BigInt;
use constant MAXPWDAGE_UNIT_PER_SEC => (
1000 # milliseconds
* 1000 # microseconds
* 10 # 100 nanoseconds
);
use constant SECS_PER_DAY => (
24 # hours
* 60 # minutes
* 60 # seconds
);
my $maxpwdage_full = ( Math::BigInt->new( $maxpwdage_highpart ) << 32 ) + $maxpwdage_lowpart;
my $days = $maxpwdage_full / MAXPWDAGE_UNIT_PER_SEC / SECS_PER_DAY;
Обратите внимание, что я намеренно использую 2 отдельные константы и делю их по порядку, потому что это делает делители меньше диапазона 32-битного целого числа. Если вы хотите написать это по-другому и хотите, чтобы он работал корректно на 32-битных perls, вам придется помнить все проблемы точности.