Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: fafafa01 en 12 Enero 2017, 07:20 am



Título: Unsigned char y operador complemento a1(~) en c
Publicado por: fafafa01 en 12 Enero 2017, 07:20 am
Buenas resulta que compile el siguiente codigo:
Código
  1. Printf("%d",~((unsigned char)~0));
  2.  

Al compilarlo da -256
Segun la logica que sigo yo y sabiendo que un char tiene 8 bits no entiendo como llega a ese resultado.

Primero al cero le realiza su complemento a1 por lo que queda todos unos,sabiendo que el char tiene ocho bits queda 11111111 que seria el numero 255. Y si luego a todos esos unos se le realiza su complemento a1 quedan todos ceros.


Título: Re: Unsigned char y operador complemento a1(~) en c
Publicado por: MAFUS en 12 Enero 2017, 15:10 pm
Tu dato es un unsigned char, pero lo aloja un registro de 32 o 64 bits. Ahí tienes la respuesta.


Título: Re: Unsigned char y operador complemento a1(~) en c
Publicado por: engel lex en 12 Enero 2017, 15:31 pm
efectivamente y solo para aclarar un poco, estás haciéndole casting de uc a 0, pero cuando lo operas desde afuera, está promoviéndolo como int (en general porque estás imprimiendo como %d) y pasándolo a un espacio de bit más grande donde el complemento es 11111111000000000