Você está na página 1de 16

Cmo se almacenan los datos?

Csar Liza Avila


Mail : creadores@hotmail.com Web site: www.cesarliza.com

No Tontn, hay 10 tipos de personas,

!las que hablamos binario y las que no!

!i?

Csar Liza Avila

22/03/2014 10:40:56

Cmo se almacenan los datos?


Se almacenan en CEROS y UNOS organizados en grupos de 8. Este agrupamiento se llama byte y es la mnima cantidad de informacin que podemos acceder directamente. 1 Byte = 8 Bits
7 6 5 4 3 2 1 0

Byte bit

Bit significa binary digit, es decir que puede almacenar dos posibles valores: 0 1, o si prefiere verdadero o falso.
Fsicamente esto se logra llevando un voltaje en cada celda.
Csar Liza Avila
22/03/2014 10:40:56

Como se almacena un entero en memoria?


Los nmeros positivos se almacenan de manera normal, y los negativos por su complemento a 2.
La razn para usar complemento-2 es para que la PC calcule una diferencia por medio de una suma. Por ejemplo, el nmero 79 se almacena como:
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0

0 0 0 00 0 0 0 0 0 0 00 0 0 0 0 0 0 00 0 00 y el nmero -79 se almacena como:


31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8

0 10 0 1 1 11
7 6 5 4 3 2 1 0

1 1 1 11 1 11

1 1 1 11 1 11

1 1 1 11 1 11

1 0 1 10 0 01

La resta de 79-79 = 79 + (-79) ser:


31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0

1 0 0 0 00 0 0 0 0 0 0 00 0 00

0 0 0 00 0 00

0 0 0 00 0 00

Csar Liza Avila

22/03/2014 10:40:56

Como se almacena un entero negativo


Para obtener como se almacena -79, obtenemos el complemento a 2 de 79 tal como se muestra:
31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0

0 0 0 00 0 00

0 0 0 00 0 00

0 0 0 00 0 00

0 10 0 1 1 11

Se invierten los bits 1 1 1 11 1 11 Se suma 1 0 0 00 0 0 00 0 0 00 0 0 00 0 0 0 00 0 00 0 0 00 0 0 01 1 1 1 11 1 11 1 1 1 11 1 11 1 01 1 0 0 00

1 1 1 11 1 11

1 1 1 11 1 11

1 1 1 11 1 11

1 0 1 10 0 01

Estos bits son los que se encuentran en memoria cuando almacenamos -79.
Csar Liza Avila
22/03/2014 10:40:56

Escriba un programa que lea un nmero # include <iostream.h> y muestre los bits de su valor positivo y # include <iomanip.h> negativo, tal como se almacenan en void impBinario(int); memoria. void main(void) { int n; cout<<"ingrese nro: "; cin>>n; cout<<"10987654321098765432109876543210"<<endl; impBinario( n); impBinario(-n); } void impBinario(int n) { unsigned int mask = 0x80000000; for (int j = 0; j<32; j++) { if ( (n & mask) > 0 ) cout<< 1; else cout<< 0; mask = (mask >> 1); } cout<<endl; } Csar Liza Avila 22/03/2014 10:40:56 6

Como se almacenan los caracteres?


Las variables se definen de tipo carcter pero se almacenan nmeros enteros. Cada nmero tiene un smbolo asociado: La Tabla de Cdigos ASCII American Standard Code for Information Interchange

Programa para obtener la Tabla ASCII


# include <iostream.h> # include <iomanip.h> void main(void) { int i; for (i=0; i<128; i++) // 256 para ASCII Extendido cout << setw (3)<< i << " << (char) i<<endl; }
Csar Liza Avila
22/03/2014 10:40:56

Tabla de Cdigos ASCII original

Csar Liza Avila

22/03/2014 10:40:56

Carcteres no imprimibles Nombre Dec Hex Nulo 0 00 Inicio de cabecera 1 01 Inicio de texto 2 02 Fin de texto 3 03 Fin de transmisin 4 04 enquiry 5 05 acknowledge 6 06 Campanilla (beep) 7 07 backspace 8 08 Tabulador horizontal 9 09 Salto de lnea 10 0A Tabulador vertical 11 0B Salto de pgina 12 0C Retorno de carro 13 0D Shift fuera 14 0E Shift dentro 15 0F Escape lnea de datos 16 10 Control dispositivo 1 17 11 Control dispositivo 2 18 12 Control dispositivo 3 19 13 Control dispositivo 4 20 14 neg acknowledge 21 15 Sincronismo 22 16 Fin bloque transmitido 23 17 Cancelar 24 18 Fin medio 25 19 Sustituto 26 1A Escape 27 1B Separador archivos 28 1C Separador grupos 29 1D Separador registros 30 1E Separador unidades 31 1F

Car. NUL SOH STX ETX EOT ENQ ACK BEL BS HT LF VT FF CR SO SI DLE DC1 DC2 DC3 DC4 NAK SYN ETB CAN EM SUB ESC FS GS RS US

Dec Hex 32 20 33 21 34 22 35 23 36 24 37 25 38 26 39 27 40 28 41 29 42 2A 43 2B 44 2C 45 2D 46 2E 47 2F 48 30 49 31 50 32 51 33 52 34 53 35 54 36 55 37 56 38 57 39 58 3A 59 3B 60 3C 61 3D 62 3E 63 3F

Car. Espacio ! " # $ % & ' ( ) * + , . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ?

Carcteres imprimibles Dec Hex Car. 64 40 @ 65 41 A 66 42 B 67 43 C 68 44 D 69 45 E 70 46 F 71 47 G 72 48 H 73 49 I 74 4A J 75 4B K 76 4C L 77 4D M 78 4E N 79 4F O 80 50 P 81 51 Q 82 52 R 83 53 S 84 54 T 85 55 U 86 56 V 87 57 W 88 58 X 89 59 Y 90 5A Z 91 5B [ 92 5C \ 93 5D ] 94 5E ^ 95 5F _

Dec 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127

Hex 60 61 62 63 64 65 66 67 68 69 6A 6B 6C 6D 6E 6F 70 71 72 73 74 75 76 77 78 79 7A 7B 7C 7D 7E 7F

Car. ` a b c d e f g h i j k l m n o p q r s t u v w x y z { | } ~ DEL

Tabla de Cdigos ASCII Extendido

Csar Liza Avila

22/03/2014 10:40:57

UNICODE
Unicode es un estndar cuyo objetivo es proporcionar el medio por el cual un texto en cualquier forma e idioma pueda ser codificado para el uso informtico.
El estndar ha sido implementado en un nmero considerable de tecnologas recientes, que incluyen XML, Java, Net, Sistemas Operativos como Linux, Windows y otros. Actualmente esta en su versin 5.0
Los UNICODE en MS-Office

Csar Liza Avila

22/03/2014 10:40:57

10

Cmo se almacenan las palabras?


Pues juntando varios caracteres en memoria consecutiva, esto es usando arreglos, pero tomando en cuenta algunas consideraciones. -Toda cadena termina en NULL. Pe: hola mundo se almacenar como h o l a m u n d o NULL

-Es por esto que el espacio ocupado es uno mas que el nmero de letras que forman la cadena. -Asimismo, cin y cout son capaces de colocar y reconocer el terminador NULL.
Csar Liza Avila
22/03/2014 10:40:57

11

Como se almacenan los nmeros con decimales?


Los valores decimales que se almacenan en variables de tipo float, utilizan un formato llamado punto flotante de simple precisin que viene a ser el estndar IEEE 754, que ocupa 4 bytes (32 bits): un 1 bit para el signo, 8 bits para el exponente (sesgado a 127) 23 bits para la mantisa (la parte fraccionaria). Adems por defecto contienen un 1 como parte entera.

31 30 29 28 27 26 25 24

23 22 21 20 19 18 17 16

15 14 13 12 11 10 9 8

7 6 5 4 3 2 1 0

signo

exponente

mantisa

Csar Liza Avila

22/03/2014 10:40:57

12

Lea un nmero en punto flotante de simple precisin y muestre cada uno de sus bits.

CODIFICACION EN C++ # include <iostream.h> struct simplePrecision { unsigned mantisa : 23; unsigned exponente: 8; unsigned signo : 1; }; union simplePrecisionUnion { float nro; struct simplePrecision pf; unsigned int n; }; void impBits(unsigned int n); void main(void) { union simplePrecisionUnion ptoF; cout<<"Ingrese un flotante:"; cin>>ptoF.nro; cout<<"Signo :" << ptoF.pf.signo << endl; cout<<"Exponente:" << ptoF.pf.exponente << endl; cout<<"Mantisa :" << ptoF.pf.mantisa << endl; impBits(ptoF.n); Csar Liza Avila }

void impBits(unsigned int n) { unsigned int mask = 0x80000000; int j; // imprime el bit de signo cout<<"Signo: "; if ( (n & mask) > 0 ) cout<< 1; else cout<< 0; mask = (mask >> 1); cout<<endl; // imprime los bits del exponente cout<<"Exponente: "; for (j = 0; j<8; j++) { if ( (n & mask) > 0 ) cout<< 1; else cout<< 0; mask = (mask >> 1); } cout<<endl; // imprime los bits de la mantisa cout<<"Mantisa: "; for (j = 0; j<23; j++) { if ( (n & mask) > 0 ) cout<< 1; else cout<< 0; mask = (mask >> 1); } cout<<endl; 22/03/2014 10:40:57 13 }

Signo: Como est en 1 el nmero ser negativo. Exponente: En decimal ser: 10000101 = 27 + 22 + 20 = 133 Pero como est sesgado a 127, hay que restarle este valor 133-127 = 6, que viene a ser el verdadero exponente. (Este sesgo es necesario para poder tener exponentes negativos, por ejemplo si los bits almacenados fueran 120, entonces el exponente sera 120-127 = -7)

Csar Liza Avila

22/03/2014 10:40:57

14

Mantisa: Cuyo valor en bits es 11101111000000000000000, se interpreta como la parte fraccionaria, por lo tanto ser: 1 1 1 1 1 1 1 fraccin = --- + --- + --- + 0 + --- + --- + --- + --- + 0 2 22 23 25 26 27 28 = (27 + 26 + 25 + 23 + 22 + 21 + 20 ) / 28 Obtencin del nmero: Por defecto todo nmero en este formato tiene un 1 implcito, que hay que sumar a la parte fraccionaria, luego lo multiplicamos por 2 elevado al exponente obtenido (6), y aadirle el signo, por lo que el nmero ser: nro = - [ 1 + (27 + 26 + 25 + 23 + 22 + 21 + 20 ) / 28 ]* 26 = - (28 + 27 + 26 + 25 + 0 +23 + 22 + 21 + 20 ) / 22 = - (256 + 128 + 64 + 32 + 8 + 4 + 2 + 1) / 22 = - 495 / 4 = - 123.75

Csar Liza Avila

22/03/2014 10:40:57

15

Formato IEEE 754 para punto flotante de doble precisin


63 62 61 60 59 58 57 56 55 54 53 52 51 50 49 48 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0

...
signo exponente mantisa

Singo.: 1 Exponente : 11 Mantisa..: 52 Desplazado: +1023

Csar Liza Avila

22/03/2014 10:40:57

16

Você também pode gostar