This works brilliantly on 64 bit machines, but the resulting integer is too large for 32 bit computers.
In realtà, i computer a 32 bit sono in grado di gestire numeri a 64 bit. OK, quindi l'aritmetica a 64 bit potrebbe richiedere alcuni cicli di clock aggiuntivi su una macchina a 32 bit, ma è improbabile che ciò sia significativo. (O anche rilevanti ... nel tuo caso d'uso.) Ad esempio, i set di istruzioni x86 hanno istruzioni aritmetiche a 64 bit.
Does that make this a bad idea?
Non per il motivo che hai dichiarato. potrebbe essere una cattiva idea per altri motivi. (Per esempio, se ci sono più informazioni che puoi codificare in 64 bit, il tuo schema si rompe.)
How common are 32 bit servers, and do we expect them to slowly disappear completely?
Sono ancora comuni e probabilmente continueranno all'infinito. Se in realtà non è necessario più di 2 ^ 30 di spazio di indirizzamento per un'applicazione, i puntatori a 32 bit occupano meno memoria dei puntatori a 64 bit ... quindi un'architettura di modello "piccola" sarà più efficiente, ecc.
Sono d'accordo anche con @DocBrown. I numeri di errore introducono tutti i tipi di problemi propri ... inclusa la tendenza a mostrare sequenze di cifre inintelligibili agli utenti finali. L'approccio human friendly è un'eccezione ben denominata e un messaggio di eccezione intelligibile / informativo.
L'altra osservazione è che la tua domanda mostra i segni di "ottimizzazione prematura". È probabile che l'impatto reale sulle prestazioni dell'ottimizzazione proposta sia insignificante, e forse anche troppo piccolo per essere misurato in un'applicazione reale in esecuzione in condizioni realistiche.
Il consiglio standard è di non sprecare il tuo tempo con questo genere di cose ... a meno che tu non abbia prove concrete (dalla misurazione della tua applicazione) che 1) lo sforzo di ottimizzazione sia garantito, e 2) questo particolare bit di codice abbia un impatto significativo sulle prestazioni generali della tua applicazione.