Archivia e lavora con grandi numeri in C

Ho bisogno di aiuto per lavorare con numeri molto grandi. Secondo il calc di Windows, l’esponente

174^55 = 1.6990597648061509725749329578093e+123 

Come posso conservare questo usando C (standard C99)?

 int main(){ long long int x = 174^55; //result is 153 printf("%lld\n", x); } 

    I tipi normali in C solitamente possono archiviare solo fino a 64 bit, quindi dovrai memorizzare grandi numeri in un array, ad esempio, e scrivere operazioni matematiche tu stesso. Ma non dovresti reinventare la ruota qui – potresti provare la GNU Multiple Precision Arithmetic Library per questo scopo.

    E come già sottolineato, l’operazione ^ è XOR binario. Per l’esponenziazione, dovrai usare funzioni matematiche come pow .

    Se l’approssimazione è OK, puoi usare numeri a virgola mobile ( float o double ). E hai bisogno di pow , non ^ , come dicevano i commentatori.

    Tuttavia, per la crittografia, l’approssimazione non funziona. Hai bisogno di supporto per l’aritmetica con interi molto grandi. GMP fornisce un supporto aritmetico generale a precisione multipla. Molti pacchetti crittografici avranno anche tali algoritmi nel loro codice, sia attraverso una libreria di terze parti che incorporata; PuTTY ha una libreria bignum per interi grandi, e OpenSSL probabilmente ha qualcosa di simile.

    I tipi di dati di base C non sono sufficienti.

    Potresti memorizzarlo in una serie di numeri interi. Un numero intero a 64 bit è solo 2 numeri interi a 32 bit. Un numero intero a 1024 bit può anche essere visto come 32 numeri interi a 32 bit.