tipos tipo sirve rangos que programacion para long ejemplos datos dato c int 32bit-64bit

c - sirve - tipos de variables en java ejemplos



Rango de valores en C Int y Long 32-64 bits (10)

De hecho, unsigned int en la mayoría de los procesadores modernos (ARM, Intel / AMD, Alpha, SPARC, Itanium, PowerPC) tendrá un rango de 0 a 2 ^ 32 - 1 que es 4,294,967,295 = 0xffffffff porque int (tanto firmado como sin firmar) ser de 32 bits de largo y el más grande es como se indica.

(el corto sin signo tendrá el valor máximo 2 ^ 16 - 1 = 65,535)

(unsigned) long long int tendrá una longitud de 64 bits (int largo será suficiente en la mayoría de los Linux de 64 bits, etc., pero el estándar promete 64 bits para long int largo). Por lo tanto, estos tienen el rango de 0 a 2 ^ 64 - 1 = 18446744073709551615

Estoy confundido con el rango de valores de la variable Int en C.

Sé que los 32 bits sin signo int tienen un rango de: 0 a 65.535. Hasta ahora tiene 0 a 4,294,967,295

Esto está bien en la máquina de 32 bits. ¿Pero ahora en las máquinas de 64 bits todas las cosas siguen igual? O tal vez mi capacidad int es diferente?

Entiendo estas preguntas como novato, pero estoy realmente confundido. Esta firma de método tampoco ayuda. :)

unsigned long long int atomicAdd(unsigned long long int* address, unsigned long long int val);


Eche un vistazo a los limits.h . Puede encontrar los valores específicos para su compilador. INT_MIN e INT_MAX serán de interés.


Eche un vistazo al archivo limits.h en su sistema que le indicará los límites específicos del sistema. O marque man limits.h y vaya a la sección "Límites numéricos".


En C y C ++ tienes estos requisitos mínimos (es decir, las implementaciones reales pueden tener magnitudes mayores)

signed char: -2^07+1 to +2^07-1 short: -2^15+1 to +2^15-1 int: -2^15+1 to +2^15-1 long: -2^31+1 to +2^31-1 long long: -2^63+1 to +2^63-1

Ahora, en implementaciones particulares, tiene una variedad de rangos de bits. El artículo de wikipedia lo describe muy bien.


En los requisitos de memoria C y C ++ de alguna variable:

signed char: -2^07 to +2^07-1
short: -2^15 to +2^15-1
int: -2^15 to +2^15-1
long: -2^31 to +2^31-1
long long: -2^63 to +2^63-1

signed char: -2^07 to +2^07-1
short: -2^15 to +2^15-1
int: -2^31 to +2^31-1
long: -2^31 to +2^31-1
long long: -2^63 to +2^63-1

Depende del compilador y la arquitectura del hardware

El estándar internacional para el lenguaje C solo requiere que el tamaño de las variables cortas sea menor o igual que el tamaño del tipo int, que a su vez debe ser menor o igual que el tamaño del tipo long.


Es mejor incluir stdlib.h . Dado que sin stdlibg toma mucho más tiempo


Extracto de K & R:

short es a menudo 16 bits, long 32 bits e int 16 bits o 32 bits. Cada compilador es libre de elegir los tamaños apropiados para su propio hardware, sujeto únicamente a la restricción de que short e int s son al menos 16 bits, long s son al menos 32 bits y short no más que int , que ya no es que long .

Puede hacer uso de limits.h que contiene la definición de los límites para los tipos decimal / flotante:

#include <stdio.h> #include <stdlib.h> #include <limits.h> #include <float.h> int main(int argc, char** argv) { printf("CHAR_BIT : %d/n", CHAR_BIT); printf("CHAR_MAX : %d/n", CHAR_MAX); printf("CHAR_MIN : %d/n", CHAR_MIN); printf("INT_MAX : %d/n", INT_MAX); printf("INT_MIN : %d/n", INT_MIN); printf("LONG_MAX : %ld/n", (long) LONG_MAX); printf("LONG_MIN : %ld/n", (long) LONG_MIN); printf("SCHAR_MAX : %d/n", SCHAR_MAX); printf("SCHAR_MIN : %d/n", SCHAR_MIN); printf("SHRT_MAX : %d/n", SHRT_MAX); printf("SHRT_MIN : %d/n", SHRT_MIN); printf("UCHAR_MAX : %d/n", UCHAR_MAX); printf("UINT_MAX : %u/n", (unsigned int) UINT_MAX); printf("ULONG_MAX : %lu/n", (unsigned long) ULONG_MAX); printf("USHRT_MAX : %d/n", (unsigned short) USHRT_MAX); printf("FLT_MAX : %g/n", (float) FLT_MAX); printf("FLT_MIN : %g/n", (float) FLT_MIN); printf("-FLT_MAX : %g/n", (float) -FLT_MAX); printf("-FLT_MIN : %g/n", (float) -FLT_MIN); printf("DBL_MAX : %g/n", (double) DBL_MAX); printf("DBL_MIN : %g/n", (double) DBL_MIN); printf("-DBL_MAX : %g/n", (double) -DBL_MAX); return (EXIT_SUCCESS); }

Tal vez tenga que retocar un poco en su máquina, pero es una buena plantilla para comenzar a tener una idea de los valores mínimos y máximos (definidos por la implementación).


No hay una sola respuesta. El estándar define rangos mínimos. Un int debe poder contener al menos 65535. Sin embargo, la mayoría de los compiladores modernos permiten que los enteros sean valores de 32 bits. Además, no hay nada que impida que múltiples tipos tengan la misma capacidad (por ejemplo, int y long).

Dicho esto, el estándar dice en su caso particular:

0 → +18446744073709551615

como el rango para unsigned long long int.

Lectura adicional: http://en.wikipedia.org/wiki/C_variable_types_and_declarations#Size


No, int en C no se define como 32 bits. int y long no están definidos para ningún tamaño específico. Lo único que garantiza el lenguaje es esa sizeof(char)<=sizeof(short)<=sizeof(long) .

Teóricamente, un compilador podría hacer short , char y long la misma cantidad de bits. Sé de algunos que realmente hicieron eso para todos esos tipos, excepto char .

Es por esto que C ahora define tipos como uint16_t y uint32_t . Si necesita un tamaño específico, se supone que debe usar uno de esos.


Un int sin signo de 32 bits tiene un rango de 0 a 4.294.967.295. 0 a 65535 sería un unsigned de 16 bits.

Un unsigned long long (y, en una implementación de 64 bits, posiblemente también ulong y posiblemente uint también) tiene un rango (al menos) de 0 a 18,446,744,073,709,551,615 (2 64 -1). En teoría, podría ser más que eso, pero al menos por ahora es raro o inexistente.