elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Estamos en la red social de Mastodon


  Mostrar Mensajes
Páginas: [1]
1  Programación / Programación C/C++ / Re: Reglas de conversión de enteros en: 23 Septiembre 2018, 21:48 pm
Muchas gracias por tu respuesta, me resolvió todas las dudas.
Un saludo!!

Es todo darle vueltas a lo mismo, pero con distintas 'palabras'...

Un byte son 8 bits, que en decimal recogen los valores desde el 0 al 255.
Cuando se toma con signo, los valores son en el rango -128 a -1 y 0 a 127
Si te fijas bien siguen siendo '8 bits'... luego esto implica que una parte de los negativos 'sobrescribe' a una parte de los positivos...

Cuáles?. Cuando se decidió sobre el asunto, se acordó que lo adecuado es que cuando dos valores se sumen, sea un resultado coherente y lo mismo si se restan... luego si 127 + 128 = 255, y 127 + 1 = 128, y -1 + 1 = 0  ....entonces...

...coge tu calculadora y escribe estos valores a binario, con ceros y unos...
verás que -1 no podría ser el 128, porque si 127+ 1 = 128, entonces cuando -1+1=0, no podría ser si -1 tuviera el valor de 128 (128-1 = 127).
Ahora puedes entender que -128= 128 y que -1= 255, ahora sí: 255+1 = 256 pero como un byte solo tiene 8 bits, se quedan los 8 ceros, y el otro bit es el 9º, el de desbordamiento... luego para un byte (o char), 255+1= 0 y 0-1= 255 tanto si es positivo como si es negativo , pero si es negativo, lo vemos 'artificiosamente' como '-1'... Quien determina si debe aparecer 255 o -1, finalmente es el tipo de datos declarado...

En fin juega en los límites de los valores positivos y negativos y tradúcelos a binario... y terminarás por comprenderlo.

...y en el supuesto de que tus dudas fueran más simples, y lo que preguntes (sin transparencias) sea porqué la salida es "1 2 3 4 5", es porque es lo que se manda imprimir cuando se cumple como verdad la condición a cada línea... (ya más arriba te he aclarado por qué son verdad las condiciones).

OJO: Fíjate que el char, no entiende de signo, se guarda igual -128 que 128, -1 que 255, al asignar un valor con signo, el compilador hace su trabajo y realiza la conversión antes de la asignación... podriase haber elegido que diera una excepción, pero sería desafortunada...
2  Programación / Programación C/C++ / Reglas de conversión de enteros en: 23 Septiembre 2018, 19:19 pm
¿¿¿Por qué la salida de este código fuente es 1 2 3 4 5???
    char x;
    char y;
   
    x = -128;
    y = -x;
   
    if (x == y) puts("1");
    if ((x - y) == 0) puts("2");
    if ((x + y) == 2 * x) puts("3");
    if (((char)(-x) + x) != 0) puts("4");
    if (x != -y) puts("5");
Páginas: [1]
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines