[C con Clase] Duda con variables char

David Reza l.fix3r.l en gmail.com
Lun Mar 17 04:54:29 CET 2008


Steven R. Davidson escribió:

> Hola David,
>
> 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órmul 
> a es
> la siguiente:
>
> complemento de 2 = 1 + complemento de 1
>
> El complemento de 1 es simplemente aplicar la negación a nivel de bi 
> ts.
> Por ejemplo, para representar el número entero -28, hacemos lo sigui 
> ente:
>
> 28 => 00011100
>
> complemento de 1 de 00011100 = NOT 00011100 = 11100011
>
> Aplicando la fórmula: complemento de 2 = 1 + complemento de 1, obten 
> emos,
>
> 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 vis 
> ta
> 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 si 
> gno.

Es verdad, había olvidado lo del complemento a 2.

> 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.

También ésto lo olvidé.

> En cuanto a los códigos ASCII, la tabla estándar es de 7 bits. Usam 
> os
> '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, aunq 
> ue
> 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.

Y cómo sé qué tipo de sistema tengo? Aún no entiendo qué utilidad  
tiene utilizar 'unsigned char' o 'signed char'.

Significa que

signed char caracter = -28;
char caracter = 228;
unsigned char caracter = 228;

son lo mismo y representan el mismo caracter?



Más información sobre la lista de distribución Cconclase