Confusión en la salida.

Acabo de empezar mi capítulo de tipos de datos revisado. Actualmente estoy estudiando el concepto de personaje firmado y sin firmar. Mi duda es que el char firmado tiene un rango de -128 a 127, entonces ¿por qué el código de abajo todavía se está ejecutando? Además, el código de abajo está dando la o / p infinita que no es comprensible para mí.

main( ) { char ch ; for ( ch = 0 ; ch <= 255 ; ch++ ) printf ( "\n%d %c", ch, ch ) ; } 

Actualmente estoy usando GCC comstackdor de 32 bits. ¿Alguien puede ayudarme, por favor, a explicar el código anterior del código anterior?

 for ( ch = 0 ; ch <= 255 ; ch++ ) 

Si ch es un carácter con signo, comenzará en 0 e incrementará a 127. Luego, en el siguiente incremento, se "enrollará" y se convertirá en -128. Usando un char sin firmar :

 127 = 0x7F 128 = 0x80 

Pero, utilizando un char firmado , 0x80 convierte en -128.

Así que ahora ch se ejecutará desde -128 hasta 127. Y dado que todos esos valores son menos de 255, esto se repetirá hasta que detenga el progtwig.

Debido a que el carácter con signo es de -128 a 127, su número binario es 10000000 y 01111111, cuando ‘ch’ se ejecuta en 127, el siguiente incremento ‘ch’ se convertirá en -128, siempre menor que 255, por lo que será infinito o / p.

Probablemente estés confundido con la salida. Creo que en el o / p estás viendo algo como esto.

0

1

2

3 …

11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 …

33! 34 “…. 125} 126 ~ 127

255 256 257

… 511 512 513 … y así sucesivamente

0 to 32 are all flags(unprintable codes) (por lo tanto, no verá la salida, solo los números de los primeros 33), followed by characters till 127 . Como puede ver, se ajusta a cada 255 caracteres para obtener el mismo resultado, but it actually stops printing characters after multiples of 127 (esta es la lista de 127 caracteres – http://web.cs.mun.ca/~michael/ c / ascii-table.html ). Simplemente se restablece después de 127 a -128, por lo que el progtwig continúa imprimiendo números hasta el infinito a pesar de que está restableciendo el carácter. Esto se debe a que cuando realiza printf("%d",ch) for -127 it prints 128 , y así sucesivamente hasta que ch = 255 y luego se vuelve a voltear y comienza a imprimir 256 en adelante y así sucesivamente, pero el valor de ch real nunca supera 127 y por lo tanto va al infinito

Un signed char c debería darle la salida anterior. Un char es esencialmente un entero de 8 bits de ancho, pero de forma predeterminada probablemente esté firmado en su comstackdor.