Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
EJEMPLO 1.
Tomemos como ejemplo a -1. En primer lugar, la parte entera (sin signo)
de -1.0 es 1. Como no hay que mover la coma decimal,
1 * 20 exp onente 127 0 127 01111111b
Entonces:
B F 8 0 0 0 0 0
1 0 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
3 3 2 2 1 0
1 0 3 2
Nótese que cada valor ocupa cuatro bytes, es decir, 32 bits. Cada byte
aparece representado en forma de dos dígitos hexadecimales. Así, por
ejemplo, la representación de -1.0, o sea, 000080BF, corresponde a los
cuatro primeros bytes a partir del inicio del archivo (posición
00000000).
EJEMPLO 2.
Bit x i acumulado
x * 2 i 1,2,3,...
1
1 1* 2 0.5000000
2
0 0*2 0.5000000
3
1 1* 2 0.625000000
4
1 1* 2 0.687500000
5
0 0*2 0.687500000
1* 2
12
1 0.699951172
13
0 0*2 0.699951172
14
0 0*2 0.699951172
15
1 1* 2 0.699981689
16
1 1* 2 0.699996948
17
0 0*2 0.699996948
18
0 0*2 0.699996948
19
1 1* 2 0.699998856
20
1 1* 2 0.699999809
21
0 0*2 0.699999809
22
1 1* 2 0.699999928
23
0 0*2 0.699999928
Por último, como 1.7 es positivo, el bit de signo, es decir, el bit 31,
será igual a 0.
Entonces:
3 F D 9 9 9 9 A
0 0 1 1 1 1 1 1 1 1 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 1 0
3 3 2 2 1 0
1 0 3 2
EJEMPLO 3.
Bit x i acumulado
x * 2 i 1,2,3,...
1
0 0*2 0.000000000
2
1 1* 2 0.250000000
3
1 1* 2 0.375000000
4
1 1* 2 0.437500000
5
0 0*2 0.437500000
6
0 0*2 0.437500000
7
1 1* 2 0.445312500
8
1 1* 2 0.449218750
9
0 0*2 0.449218750
10
0 0*2 0.449218750
11
1 1* 2 0.449707031
1* 2
12
1 0.449951172
13
0 0*2 0.449951172
14
0 0*2 0.449951172
15
1 1* 2 0.449981689
16
1 1* 2 0.449989319
17
0 0*2 0.449989319
4 2 F 6 E 6 6 6
0 1 0 0 0 0 1 0 1 1 1 1 0 1 1 0 1 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0
3 3 2 2 1 0
1 0 3 2
#include <fstream>
struct real {
float valor;
};
preal->valor=-1.0;
for (int contador=0; contador<20; contador++){
// escribir el contenido de la variable en el archivo
salida.write((const char*)preal, sizeof(real));
// mostrar en pantalla el mismo valor
printf("\n%10.7f", preal->valor);
// incrementar en 0.125 el valor de la variable. Esto quiere decir que
// el segundo valor a almacenar en el archivo será -0.875, luego, -
// -0.750, etc.
preal->valor+= 0.125;
}
preal->valor+= 0.2; // aquí alcanza el valor de 1.7
printf("\n%10.7f", preal->valor);
salida.write((const char*)preal, sizeof(real));
MOTA:
Para poder utilizar printf("\n%10.7f", preal->valor), se debe incluir el
archivo de prototipos stdo.h el cual no es orioui de C++, sino de C
estándar. Esta función, sin embargo, permite controlar a voluntad del
programador (y las características del lenguaje de programación, por
supuesto) el número de posiciones decimales que se quiere mostrar en
pantalla. En este sentido, es más potente que la función std::cout de
C++. Para una comparación más detallada entre printf()y std::cout se
puede consultar el artículo “Comentarios sobre printf()y std::cout”m que
está disponible en cosmemarcano.wordpress.com.
COMENTARIO FINAL.