Ir ao conteúdo
  • Cadastre-se

Uso da union


esorato

Posts recomendados

Olá a todos,

Estou estudando um pouco de linguagem C e pintou uma dúvida:

Quando utilizo union a mesma área de memória é compartilhada pela variáveis definidas na union. Se eu definir na union um int e um char, em que posição da memória será alocado o char, no MSB ou no LSB do int ?

Link para o comentário
Compartilhar em outros sites

Ótima pergunta essa.

Montei o seguinte código abaixo, utilizando máscara de bit.

Vamos ver o que nos retorna:


#include <stdlib.h>
#include <stdio.h>

/** Mascara de bits **/
typedef struct
{

unsigned int h:1;
unsigned int g:1;
unsigned int f:1;
unsigned int e:1;
unsigned int d:1;
unsigned int c:1;
unsigned int b:1;
unsigned int a:1;
} bit_mask;

typedef union
{
bit_mask mask;
unsigned int valor:8; /** fazer com que tenha apenas 8 bit, compativel com o char **/
unsigned char letra;
} TUnion;

int main( void )
{

TUnion teste; // Nao foi atribuido nenhum valor \
// para as variaveis da estrutura ainda

teste.valor = 65; /** char 'A' **/
printf("conteudo de letra: %c\n", teste.letra);
printf("conteudo de valor: %d\n", teste.valor);
printf("conteudo de mask: %d%d%d%d%d%d%d%d\n", teste.mask.a, teste.mask.b, teste.mask.c, teste.mask.d, teste.mask.e, teste.mask.f, teste.mask.g, teste.mask.h);

return 0;

}

Saída:


conteudo de letra: A
conteudo de valor: 65
conteudo de mask: 01000001

Isso confirma que, ele sempre preenche o lado mais a direita da memória.

Link para o comentário
Compartilhar em outros sites

  • 7 meses depois...

A outra coisa a levar em consideração... o processador carrega bytes de forma inversa na memória...

Endereço

0x000EE800 0x04

0x000EE801 0x00

0x000EE802 0x00

0x000EE803 0x00

Ai em cima no meu pc por exemplo sgnifica o número 4!, o menor valor vem primeiro :D, então pode haver confusão quando falamos em direita ou esquerda na memória, eu acredito que seja no byte menos significativo do int :P nesse caso o menor endereço onde está alocado o inteiro

Link para o comentário
Compartilhar em outros sites

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...