Duda con modificadores de tipo

Iniciado por DiegoSD, 8 Junio 2020, 00:02 AM

0 Miembros y 1 Visitante están viendo este tema.

DiegoSD

Hola, la mía es una pregunta muy básica, recién empezando en C con el libro "aprendiendo C en 24 hs." que no me ha dado mayores problemas hasta el momento. Resulta que en un ejercicio declara como ejemplo un signed char que luego inicializa así ch=0xFF. Enseguida en el próximo renglón imprime:
           printf("El valor decimal de signed 0xFF es %d.\n", ch);
                         
                                  lo que devuelve:
                     El valor decimal de signed 0xFF es -1

Bien, mi pregunta es ¿de dónde carajos sale el -1?! Sé pasar de decimal negativo a binario y viceversa, peor no logro entender este resultado. Por favor, alquien que se compadezca y me lo pueda explicar de manera que lo entienda un novato?
Muchas gracias,

Loretz

#1
No tengo en claro cómo es en C, pero en C++:

El estándar garantiza que un signed char puede ir desde -127 hasta +127, al menos.

0xFF (256) es de tipo int.
...
EDITO
NHAAAA, he dicho una tontería.commo dice el colega, 0xFF es 255,

(¡La pastilla!)

Pero bueno, 255.

De todos modos, el estándar garantiza que un tipo entero siempre pueda convertirse en cualquier otro tipo entero, en este caso, el int 255 puede convertirse en signed char. Pero, como ese valor excede el máximo signed char posible, el resultado de la operación queda "implementation defined" definido por la implementación; esto es: cada compilador hará lo que mejor le parezca, y al tuyo le ha parecido -1


Eternal Idol

0xFF es 255 o -1 segun se lo interprete con o sin signo, en este caso es un signed char asi que es -1 (256 es 0x100 y si necesita dos bytes para ser representado).

Sale de aca: Complemento a dos (o a la base)

~11111111->00000000 + 1 = -1 en complemento a 2
La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón