<html>
<head>
<style><!--
.hmmessage P
{
margin:0px;
padding:0px
}
body.hmmessage
{
font-size: 12pt;
font-family:Calibri
}
--></style></head>
<body class='hmmessage'><div dir='ltr'><font style="" face="Courier New">Hola hola, como estan, tengo un pequeño problema de comprencion, es el siguiente:<br><br>Hice un programa para ver como se almacena un valor punto flotante en memoria, es el siguiente:<br><br><br><br><br>#include"stdio.h"<br><br>struct st1 {<br>    bool a1 : 1;<br>    bool a2 : 1;<br>    bool a3 : 1;<br>    bool a4 : 1;<br>    bool a5 : 1;<br>    bool a6 : 1;<br>    bool a7 : 1;<br>    bool a8 : 1;<br>    bool b1 : 1;<br>    bool b2 : 1;<br>    bool b3 : 1;<br>    bool b4 : 1;<br>    bool b5 : 1;<br>    bool b6 : 1;<br>    bool b7 : 1;<br>    bool b8 : 1;<br>    bool c1 : 1;<br>    bool c2 : 1;<br>    bool c3 : 1;<br>    bool c4 : 1;<br>    bool c5 : 1;<br>    bool c6 : 1;<br>    bool c7 : 1;<br>    bool c8 : 1;<br>    bool d1 : 1;<br>    bool d2 : 1;<br>    bool d3 : 1;<br>    bool d4 : 1;<br>    bool d5 : 1;<br>    bool d6 : 1;<br>    bool d7 : 1;<br>    bool d8 : 1;<br>    };<br><br>union punto {<br>    struct st1 car;<br>    float  x;<br>    };<br><br><br>int main(){<br>    <br>    union punto var;<br>    <br>    var.x=0.5;<br>    <br>    for(short y=1; y<12; y++){<br>        <br>        printf("%.1f  =     ", var.x);<br>        <br>        printf("%d", (short)var.car.a1);<br>        printf("%d", (short)var.car.a2);<br>        printf("%d", (short)var.car.a3);<br>        printf("%d", (short)var.car.a4);<br>        printf("%d", (short)var.car.a5);<br>        printf("%d", (short)var.car.a6);<br>        printf("%d", (short)var.car.a7);<br>        printf("%d ", (short)var.car.a8);<br>    <br>        printf("%d", (short)var.car.b1);<br>        printf("%d", (short)var.car.b2);<br>        printf("%d", (short)var.car.b3);<br>        printf("%d", (short)var.car.b4);<br>        printf("%d", (short)var.car.b5);<br>        printf("%d", (short)var.car.b6);<br>        printf("%d", (short)var.car.b7);<br>        printf("%d ", (short)var.car.b8);<br>    <br>        printf("%d", (short)var.car.c1);<br>        printf("%d", (short)var.car.c2);<br>        printf("%d", (short)var.car.c3);<br>        printf("%d", (short)var.car.c4);<br>        printf("%d", (short)var.car.c5);<br>        printf("%d", (short)var.car.c6);<br>        printf("%d", (short)var.car.c7);<br>        printf("%d ", (short)var.car.c8);<br>    <br>        printf("%d", (short)var.car.d1);<br>        printf("%d", (short)var.car.d2);<br>        printf("%d", (short)var.car.d3);<br>        printf("%d", (short)var.car.d4);<br>        printf("%d", (short)var.car.d5);<br>        printf("%d", (short)var.car.d6);<br>        printf("%d", (short)var.car.d7);<br>        printf("%d\n", (short)var.car.d8);<br>        <br>        var.x=(short)y;<br>    <br>        }<br>    <br>    <br>    printf("\nsizeof(union punto): %d\n", sizeof(union punto));<br>    <br>    return 0;<br>    }<br><br><br>Supongo que el programa esta bien, pero no puedo interpretar los valores, quiero decir: la salida es la siguiente:<br><br>0.5  =     00000000 00000000 00000000 11111100<br>1.0  =     00000000 00000000 00000001 11111100<br>2.0  =     00000000 00000000 00000000 00000010<br>3.0  =     00000000 00000000 00000010 00000010<br>4.0  =     00000000 00000000 00000001 00000010<br>5.0  =     00000000 00000000 00000101 00000010<br>6.0  =     00000000 00000000 00000011 00000010<br>7.0  =     00000000 00000000 00000111 00000010<br>8.0  =     00000000 00000000 00000000 10000010<br>9.0  =     00000000 00000000 00001000 10000010<br>10.0 =     00000000 00000000 00000100 10000010<br><br>sizeof(union punto): 4<br><br><br>*****************************************************<br><br>Segun un libro que leo se supone que la salida de 0.5 debe ser:<br><br></font><font style="" face="Courier New">0.5  =     00000000 00000000 00000101 11111111</font><br><br>ya que los primeros tres octeto escrito representa el valor 5 y el ultimo octeto reprecenta el valor -1, entonces el valor se lo interpreta de la siguiente manera:<br><br>5 * 10^(-1)    =   0.5<br><br>donde 10 es un valor necesario en la interpretacion de los valores flotante.<br><br>Como podemos ver, la secuencia de bits en la salida no es la esperada.<br><br>Entiendo que hay varias formas de interpretar valores para una computadora, o puede ser tambien que el programa esté resuelto de una forma incorrecta, pero me inclino por lo primero.<br><br>Espero me puedan ayudar con este dilema, creo que es basico conoser como se almacenan e interpretan los numeros en la memoria.<br>Gracias por sus respuestas.<br id="FontBreak">                                      </div></body>
</html>