<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>