Ir ao conteúdo
  • Comunicados

    • Gabriel Torres

      Seja um moderador do Clube do Hardware!   12-02-2016

      Prezados membros do Clube do Hardware, Está aberto o processo de seleção de novos moderadores para diversos setores ou áreas do Clube do Hardware. Os requisitos são:   Pelo menos 500 posts e um ano de cadastro; Boa frequência de participação; Ser respeitoso, cordial e educado com os demais membros; Ter bom nível de português; Ter razoável conhecimento da área em que pretende atuar; Saber trabalhar em equipe (com os moderadores, coordenadores e administradores).   Os interessados deverão enviar uma mensagem privada para o usuário @Equipe Clube do Hardware com o título "Candidato a moderador". A mensagem deverá conter respostas às perguntas abaixo:   Qual o seu nome completo? Qual sua data de nascimento? Qual sua formação/profissão? Já atuou como moderador em algo outro fórum, se sim, qual? De forma sucinta, explique o porquê de querer ser moderador do fórum e conte-nos um pouco sobre você.   OBS: Não se trata de função remunerada. Todos que fazem parte do staff são voluntários.
    • DiF

      Poste seus códigos corretamente!   21-05-2016

      Prezados membros do Fórum do Clube do Hardware, O Fórum oferece um recurso chamado CODE, onde o ícone no painel do editor é  <>     O uso deste recurso é  imprescindível para uma melhor leitura, manter a organização, diferenciar de texto comum e principalmente evitar que os compiladores e IDEs acusem erro ao colar um código copiado daqui. Portanto convido-lhes para ler as instruções de como usar este recurso CODE neste tópico:  
esorato

Uso da union

Recommended Posts

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 ?

Compartilhar este post


Link para o post
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.

Compartilhar este post


Link para o post
Compartilhar em outros sites

XP_hunter está certo, a forma como o espaço é preenchido depende do sistema, a linguagem só garante que se você colocar um char e ler um char você vai ter o resultado certo, colocar um char e tentar ler um inteiro é um erro.

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário






Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações 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

×