Tipos básico sin signo en C (en bajo nivel)

Hola. Estoy estudiando una asignatura y me ha surgido la siguiente duda: ¿Que diferencia hay entre declarar un carácter con signo y un carácter sin signo?

Para el siguiente carácter:

X7 X6 X5 X4 X3 X2 X1 X0

se supone que cuando el caracter tiene signo, está declarado por ejemplo:

char var1;

el bit mas significativo (X7) nos indica si este número es positivo o negativo. Si este bit es 0 el número es tal cual, si el bit es 1 el número es negativo y está expresado en Ca2.

Hasta aquí correcto. El problema viene cuando declaro el carácter sin signo, por ejemplo:

usigned char var2;

ahora se supone que el número no puede ser negativo (porque no tiene signo ¿no?) pues sí que lo puede ser, puedes asignarle -16 y lo reconoce sin problemas.

Además, contando con que el bit (X7) no va a indicar signo (porque para eso es sin signo, ¿no?) digo yo que el número mas grande para este tipo sería:

1111 1111

es decir, el +255. Pues no, lo reconoce como el -1. Es decir, ve que el bit (X7) es 1, le hace el Ca2 y se queda con que es el -1.

¿Porque? ¿Acaso mi compilador (Visual C++ 2005) implementa igual los tipos de datos con signo o sin signo?
0 respuestas