[C con Clase] Duda con variables char
Steven R. Davidson
vze266ft en verizon.net
Lun Mar 17 04:30:36 CET 2008
Hola David,
David Reza wrote:
>
> Por qué -65 es igual a 191?
>
> Se supone que si la variable es signed sólo puedo almacenar valores
> entre 0 y 255 y si es unsigned, valores entre -254 al 255?
>
Esto tiene que ver con la representación interna de números enteros.
Para valores negativos, se suele usar el complemento de 2. La fórmula es
la siguiente:
complemento de 2 = 1 + complemento de 1
El complemento de 1 es simplemente aplicar la negación a nivel de bits.
Por ejemplo, para representar el número entero -28, hacemos lo siguiente:
28 => 00011100
complemento de 1 de 00011100 = NOT 00011100 = 11100011
Aplicando la fórmula: complemento de 2 = 1 + complemento de 1, obtenemos,
1 + 11100011 = 11100100
Si este valor es interpretado como un número con signo, entonces
representa el valor -28 (en decimal). Sin embargo, si se interpreta como
un número sin signo, entonces el valor es 228.
Por esta razón, el valor -65 y 191 son iguales desde el punto de vista
de los bits que representan ambos valores. Como ya he dicho, la decisión
de tomar uno u otro valor depende de su interpretación: con o sin signo.
Por lo tanto, las cotas inferior y superior para un 'signed char' son:
-128 y +127, respectivamente, mientras que para un 'unsigned char',
tenemos: 0 y 255.
> Lo que se me ocurre es que los símbolos alfanuméricos no son tantos y
> se repiten, por lo tanto pueden tener 2 códigos ASCII. Estoy mal?
En cuanto a los códigos ASCII, la tabla estándar es de 7 bits. Usamos
'char' porque podemos representar valores de 8 bits, que se ajusta a los
7 necesarios. Algunos sistemas extendieron la tabla ASCII a 8 bits
agregando más caracteres como por ejemplo las eñes, las vocales con
tildes, circunflejos, y otras virgulillas. Para esta extensión, aunque
usemos 'char' con signo, realmente la convertiríamos a un 'char' sin
signo. Como ya he explicado, el cambio no es tan drástico, ya que el
valor binario es el mismo; lo que cambia es la interpretación de tal valor.
Espero que todo esto aclare el tema.
Steven
Más información sobre la lista de distribución Cconclase