Muchas gracias por tu respuesta, me resolvió todas las dudas.
Un saludo!!
Un saludo!!
Cita de: NEBIRE en 23 Septiembre 2018, 19:49 PM
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...