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 eint
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 queshort
eint
s son al menos 16 bits,long
s son al menos 32 bits yshort
no más queint
, que ya no es quelong
.
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.