Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: DiegoSD en 8 Junio 2020, 00:02 am



Título: Duda con modificadores de tipo
Publicado por: DiegoSD en 8 Junio 2020, 00:02 am
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,


Título: Re: Duda con modificadores de tipo
Publicado por: Loretz en 8 Junio 2020, 02:29 am
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



Título: Re: Duda con modificadores de tipo
Publicado por: Eternal Idol en 8 Junio 2020, 09:30 am
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) (https://es.wikipedia.org/wiki/Representaci%C3%B3n_de_n%C3%BAmeros_con_signo#Complemento_a_dos_(o_a_la_base))

~11111111->00000000 + 1 = -1 en complemento a 2