Representação de Dados 2/4 Software Básico Aula 5 Prof. Dr. Rogério Vargas http://rogerio.in Endianess (Extremidade) ● Como organizamos os bytes na memória? ● ● ● Big Endian: byte mais significativo com endereço mais baixo → Sun, Mac Little Endian: byte menos significativo com endereço mais baixo → Intel, AMD (padrão x86) Exemplos ● Y = 0x1234567816 (= 30541989610) e &Y = 0xA00 Endereço 0xA00 0xA01 0xA02 0xA03 Big Endian 12 34 56 78 Little Endian 78 56 34 12 Endianess ● Como organizamos os bytes na memória? ● ● ● Big Endian: byte mais significativo com endereço mais baixo → Sun, Mac Little Endian: byte menos significativo com endereço mais baixo → Intel, AMD (padrão x86) Exemplos ● Y = 0x1234567816 (= 30541989610) e &Y = 0xA00 Endereço 0xA00 0xA01 0xA02 0xA03 Big Endian 12 34 56 78 Little Endian 78 56 34 12 Nossa Arquitetura será esta! Por causa do Endianess... ● Quando usamos compiladores: programa → assembly → linguagem de máquina ● ● Quando usamos assembly: programa (assembly) → linguagem de máquina ● ● O endianess não nos interessa: programas iguais geram resultados iguais O endianess é absolutamente relevante! Transferência de dados entre máquinas bigendian e little-endian → outra dor de cabeça (para os programadores de baixo nível) Nossa máquina é ● Exercício ● Baixe o programa endianess.c da página ● Verifique como ficam representados os seguintes números (note que você precisará convertê-los em decimal) ● 0x42423232 ● 0x12344321 ● 0xABCD1234 ● 0x00000001 ● 0X80000000 Limitações da máquina ● ● Pode-se usar quantidades variadas de bytes para representar números Inteiros não negativos ● 1 byte: 28-1 = 255 ● 2 bytes: 216-1 = 65.535 ● 4 bytes: 232-1 = 4.294.967.295 ● 8 bytes: 264-1 = 18.446.744.073.709.551.615 Alguns Tipos Tipo (C) No de bytes (32 bits) No de bytes (64 bits) char 1 1 short int 2 2 int 4 4 long int 4 8 char* 4 8 int* 4 8 long int* 4 8 Char ● O tipo char é representado como um inteiro ● 1 byte (ASCII) ● Unicode: UTF-8 UTF-16 UTF-32 (1, 2 e 4 bytes) Char