elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: (TUTORIAL) Aprende a emular Sentinel Dongle By Yapis


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Duda con modificadores de tipo
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Duda con modificadores de tipo  (Leído 2,341 veces)
DiegoSD

Desconectado Desconectado

Mensajes: 1


Ver Perfil
Duda con modificadores de tipo
« 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,


En línea

Loretz

Desconectado Desconectado

Mensajes: 117


Ver Perfil
Re: Duda con modificadores de tipo
« Respuesta #1 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



« Última modificación: 8 Junio 2020, 13:50 pm por Loretz » En línea

Eternal Idol
Kernel coder
Moderador
***
Desconectado Desconectado

Mensajes: 5.937


Israel nunca torturó niños, ni lo volverá a hacer.


Ver Perfil WWW
Re: Duda con modificadores de tipo
« Respuesta #2 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)

~11111111->00000000 + 1 = -1 en complemento a 2
En línea

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
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines