¿Cómo leer y asignar grandes enteros en C?

Estoy tratando de asignar un valor entero grande a una variable en c y cuando imprimo solo obtengo 10123456.

¿Cual es el problema?

int main(){ long a = 1234567890123456; printf("\n",sizeof(a)); printf("%ld",a); } 

El tipo entero más grande es:

 unsigned long long 

No te olvides del sufijo ULL.
o si necesita enteros más grandes, eche un vistazo a algunas bibliotecas bigint como gmp .

Por supuesto, también es long long , pero también es para enteros negativos y tiene límites más pequeños.

  Type min max (signed) long long -9223372036854775808 9223372036854775807 unsigned long long 0 18446744073709551615 
 long a = 1234567890123456L; 

Si es lo suficientemente largo, depende del comstackdor / sistema operativo. Si no

 long long a = 1234567890123456LL; 

Si el número es mayor que 64 bits, es decir, más de lo que puede contener un unsigned long long , entonces ningún otro tipo de datos en C que no sea la cadena ( char[] ) podrá acomodar ese valor, almacenarlo como una cadena e intentar escribir sus propias funciones para operar (por ejemplo, sumr, restar, etc.) en estos “números muy grandes”.