English Deutsch Français Italiano Español Português 繁體中文 Bahasa Indonesia Tiếng Việt ภาษาไทย
Todas las categorías

Es decir, como es que se hace ese calculo, como puedo programar algo que llegue a esos limites para demostrar practicamente eso? y de igual forma para long, float, double y tal vez char ??

2007-03-22 11:12:29 · 5 respuestas · pregunta de Expocket 2 en Ordenadores e Internet Programación y Diseño

Atendiendo a una respuesta que decia que programara un contador que superara 32767 , lo hice:
#include
main() { int i;
for (i=0; i<35000; ++i+100)
printf("%d,",i);
getch(); }

y pues perfectamente suma el contador los 35000? entonces como esta ese asunto del limite?

2007-03-22 11:45:27 · update #1

perdon, el +100 del for esta erroneo, no lo tomen en cuenta

2007-03-22 11:46:49 · update #2

5 respuestas

Para explicar el rango de valores de un entero con signo de 16 bits, el tipo int de ALGUNAS IMPLEMENTACIONES del lenguaje C, se debe recurrir a un cálculo matemático. No es necesario un ciclo for ni nada por el estilo.

Cuando un entero tiene 16 bits y además tiene signo, el bit más significativo (el de más a la izquierda) es el bit de signo. Si vale 1, entonces el número es negativo. Si vale 0, es 0 o positivo. Los restantes 15 bits codifican los dígitos.

Entonces, con 15 bits tenemos 2^15 = 32768 números posibles para codificar. En el caso de los enternos no negativos, podemos ir desde 0 hasta 32767 (con el cero llegamos a 32768 números). En el caso de los negativos, vamos desde -1 hasta -32768.

Esa es la explicación del rango de valores para los enteros con signo, que puede simplificarse en el caso de que carezcan de signo. Cuando los enteros tienen otro tamaño, como los más utilizados enteros de 8, 32 y 64 bits, entonces cambiamos el cálculo:
1. 8 bits: 2^8 números posibles:
2. 32 btis: 2^32 números posibles.
3. 64 bits: 2^64 números posibles.
Si tienen signo, entonces el exponente sería menor en una unidad.

Para el caso de los números reales, o con punto flotante, la codificación es distinta: se usa un bit de signo, un conjunto de bits de mantisa y otro conjunto de bits de exponente. El valor es:
Mantisa * 10 ^ Exponente. Con el bit de signo, sucede lo mismo que con los enteros.

En este link se explica con detalle la codificación del estándar IEEE 754 de números de punto flotante:
http://es.wikipedia.org/wiki/IEEE_punto_flotante

Cordiales saludos.

2007-03-22 13:52:41 · answer #1 · answered by Sir John 6 · 2 0

El int tiene ese valor si es int de 16 bits. Por lo menos el int en windows xp con mingw es de 32 bits así es que el rango es mucho mayor.

Revisa esta página:
http://newdata.box.sk/bx/c/htm/ch03.htm

Ahí salen los rangos. Haz lo siguiente (ejemplo para el int que llega hasta 2,147,483,647

int i = 2147480000;
for(;;) {
printf("%d\n",i);
i++;
}

A todo esto: La respuesta de Sir John es la más acertada.

Saludos!

2007-03-23 01:44:40 · answer #2 · answered by Juan Pablo 3 · 1 0

con un ciclo for lo podras confirmar, y demostrar en salida de video (monitor)

i = variable tipo entero

for (i=0;i++;i=33000)
{
printf("valor de num: [%d]",i);
if (i>0) break;
}

listo, totalmente demostrado, ok

2007-03-22 21:47:43 · answer #3 · answered by blastermix 2 · 0 0

En un ciclo for , vas sumando de 100 en 100 y lo despliegas o imprimes en pantalla, y se verá como pasa de 32700 a un número negativo por desbordamiento, sería similar con un long y con char pero este último tendrías que hacer un cast para que imprima o despliegue un número y no un caracter .
Con los de punto flotante sumarias otro flotante como 1000.0 y también verías el desbordamiento .

2007-03-22 18:24:36 · answer #4 · answered by Mas Sabe el Diablo por viejo que 7 · 0 1

No te entiendo bien.. ¿que quieres hacer? comprobar que un numero este en esos rangos??? con un procedimiento o que??

Lo siento..

2007-03-22 18:22:50 · answer #5 · answered by kazu 2 · 0 1

fedest.com, questions and answers