<div dir="ltr"><div><div>Me ha quedado bastante claro lo que ocurría. No sabía que era el primer bit el que indicaba el signo, yo pensaba que era el último bit. Muchas gracias a todos, que tengan un buen día.<br><br></div>
Saludos.<br><br></div>Julio Cesar<br></div><div class="gmail_extra"><br><br><div class="gmail_quote">El 29 de junio de 2014, 22:49, Facundo Curti <span dir="ltr"><<a href="mailto:facu.curti@gmail.com" target="_blank">facu.curti@gmail.com</a>></span> escribió:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Hola. Como estan? Solo agrego una aclaración a Julio.<br>
<br>
El día 29 de junio de 2014, 11:51, Sebastian Oldani<br>
<<a href="mailto:sebastianoldani@gmail.com">sebastianoldani@gmail.com</a>> escribió:<br>
<div class="">> Bueno, eso es un problema de interpretación, cuando declaras una variable<br>
> como char, lo que estas diciendo es que vas a usar 1 Byte de espacio de<br>
> memoria. osea 8 bits.<br>
><br>
> Hola, como va?. Lo que sucede es que let no es unsigned, entonces lo esta<br>
> interpretando siempre como si valiera -56, cuando lo castias a unsigned int<br>
> le va a agregar los bytes que le falten para ser un unsigned int y lo va a<br>
> interpretar desde ese punto.<br>
><br>
> Te hago ese ejemplo en hexadecimal para que se entienda.<br>
><br>
> vos le cargas a un char el valor 200, que equivale a cargarle -56.<br>
><br>
> let = 0xc8 (es 200 en hexa)<br>
><br>
> cuando lo casteas a int, es como que let ahora vale = 0xffffffc8 si imprimis<br>
> esto en la consola te va a decir que vale -56, sigue valiendo lo mismo.<br>
><br>
> pero si le decis que interprete eso valor como un valor sin signo ese mismo<br>
> valor vale 4294967240.<br>
<br>
</div>Esto es por que cuando tomas una variable como signed, toma el primer<br>
bit, para indicar si es positivo o negativo. Si es unsigned, ese bit<br>
queda para definir parte del valor. Y los otros 7 bit's invierten su<br>
valor. De 0's a 1's y de 1's a 0's.<br>
<br>
Entonces. 10000001 en unsigned, seria 129.<br>
Pero, en unsigned, el primer 1 se toma para indicar que lo que sigue,<br>
es un valor negativo. Y, para leerlo. Los 0's se transforman en 1's y<br>
viceversa.<br>
<br>
Entonces, 10000001, se leeria:<br>
     - El primer 1 indica que es negativo.<br>
     - Los otros 7 numeros. Los 0's pasan a 1's, y viceversa:<br>
             1                    -               1111110<br>
             ^                                     ^^^^^^^^<br>
             |                                      \\     //<br>
          Negativo                         126 en binario<br>
<br>
En definitiva. Se leería como -126. A diferencia que si lo hiciéramos<br>
como unsigned, que valdría 129.<br>
<br>
Las respuestas de Sebastián y Yolmer ya complementan el resto.<br>
<br>
Saludos! ;)<br>
<div class="HOEnZb"><div class="h5">><br>
> Espero se entienda. Nos vemos.<br>
><br>
><br>
> El 28/06/14 22:26, Julio Cesar escribió:<br>
>><br>
>> Buenas tardes a todos, ya estoy aquí de nuevo molestándolos, espero me<br>
>> puedan ayudar a entender un problema que tengo con estos castings en<br>
>> particular.<br>
>><br>
>> La situación es, si yo tengo:<br>
>><br>
>> int main(){<br>
>>     char let;<br>
>>     unsigned char let2:<br>
>><br>
>>     let = (char)200;<br>
>>     let2 = (unsigned char)200;<br>
>>     cout << (int)let << endl << (unsigned int)let << endl << (int)let2<br>
>> << endl << (insigned int)let2 << endl;<br>
>><br>
>> return 0;<br>
>> }<br>
>><br>
>> el resultado es:<br>
>><br>
>> -56<br>
>> 4294967240<br>
>> 200<br>
>> 200<br>
>><br>
>> Entonces mi duda es sobre la primera y segunda impresion en<br>
>> pantalla"(int)let" y  "(unsigned int)let", en la segunda a que se debe<br>
>> que me arroje ese numero, ¿No deberia devolver 200 como en la cuarta<br>
>> impresion en pantalla?. Y en la primera, ¿Que no deberia devolver 200<br>
>> como en la tercera?, pues segun yo el "binario" de de let y let2 es el<br>
>> mismo.<br>
>><br>
>> Gracias por la ayuda y la atención prestada, que tengan buen día y<br>
>> disculpen tantas molestias ocasionadas.<br>
>><br>
>> Julio Cesar<br>
>><br>
>><br>
>> _______________________________________________<br>
>> Lista de correo Cconclase <a href="mailto:Cconclase@listas.conclase.net">Cconclase@listas.conclase.net</a><br>
>> <a href="http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net" target="_blank">http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net</a><br>
>> Bajas: <a href="http://listas.conclase.net/index.php?gid=2&mnu=FAQ" target="_blank">http://listas.conclase.net/index.php?gid=2&mnu=FAQ</a><br>
>><br>
><br>
><br>
> _______________________________________________<br>
> Lista de correo Cconclase <a href="mailto:Cconclase@listas.conclase.net">Cconclase@listas.conclase.net</a><br>
> <a href="http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net" target="_blank">http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net</a><br>
> Bajas: <a href="http://listas.conclase.net/index.php?gid=2&mnu=FAQ" target="_blank">http://listas.conclase.net/index.php?gid=2&mnu=FAQ</a><br>
<br>
_______________________________________________<br>
Lista de correo Cconclase <a href="mailto:Cconclase@listas.conclase.net">Cconclase@listas.conclase.net</a><br>
<a href="http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net" target="_blank">http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net</a><br>
Bajas: <a href="http://listas.conclase.net/index.php?gid=2&mnu=FAQ" target="_blank">http://listas.conclase.net/index.php?gid=2&mnu=FAQ</a><br>
</div></div></blockquote></div><br></div>