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:  
Ariel98

Problema simples sobre campo de bits - C++

Recommended Posts

Olá pessoas.

 

Eu tenho uma dúvida, que eu acho que seja simples, sobre campo de bits em struct em C++. Segue o código:

 

#include <iostream>
#include <cstdlib>
using namespace std;
struct Bits{
	int bit1:1;
	unsigned:0;
	unsigned bit3:3;
	unsigned bit4:2;
}campo;
int main()
{
	campo.bit1 = 1;
	campo.bit3 = 1024>>8;
	campo.bit4 = 2048>>10;
	cout << campo.bit1 << " " << campo.bit3 << " " << campo.bit4 << endl;
	system("pause");
	return 0;
}

Bom, a ideia é prever a saída desse programa. Eu consegui entender (eu acho) a parte de deslocamento de bits e, segundo minhas contas, a saída deveria ser (1  4  2). Mas por algum motivo que eu não conheço o valor de campo.bit1 ficou com valor de -1, e a saída ficou (-1  4  2), sem os parênteses.

 

Alguém sabe me explicar porque do sinal negativo no campo.bit1? Eu só sei que isso tem relação com o fato de não ser unsigned, mas essa é a parte óbvia. Agradeço desde já.

 

(Qualquer coisa mal formatada, perdoem. É a primeira vez que uso o fórum :D)

Editado por Ariel98

Compartilhar este post


Link para o post
Compartilhar em outros sites

UNSIGNED X SIGNED

 

      Independente do sistema e/ou arquitetura os atuais sistemas computadorizados

utilizam se de duas notações para números; unsigned quer dizer sem sinal,  signed

que convencionalmente não é declarado pois existe por padrão implícito e quer  nos

diz que, é com sinal, logo é o oposto de seu antagonista unsigned.

 

      Vamos adentrar um pouco mais na  memória  e  fazermos   uma representação

gráfica  de   byVal especificamente,  como  sendo  uma  variável  declarado  do  tipo

campo dentro das diretrizes impostas por sistemas 16 bits.

 

 

Matriz12 Dec. 08 15.17.jpg

 

A imagem acima nos ilustra o  momento  e  como função cout  interpreta  este  field

na memória. Quero dizer é um campo mais  no  instante  da tarefa de exibir  na  tela

se captura e a torna variável, assim sendo, toda variável inteira com sinal tem  o  pri-

meiro bit da sequência o indicador da existência de sinal negativo, "regra do 1 bit".

Quando declarado como sendo signed este bit sinaliza, ou seja é inteiro que  admite

negativo,   quando   explicitamente   declaramos   unsigned   estamos  dizendo para

o interpretador que está variável dever assumir valores somente positivos e ignore a

regra do 1º bit.

 

     Avaliando o problema acima, o único bit da sequência, e por tanto o primeiro é  1,

se não é definido unsigned, então será negativo, contrário será sempre positivo.

 

     

 

@Ariel98

Referencias / Leitura:

Arquitetura 16 bits.

[cout] Função exibir C++

Qual a finalidade do unsigned no C.

WIKIPEDIA: Binário Sinalizados 2016

 

 

 

Editado por Mauro Britivaldo
Add IMG

Compartilhar este post


Link para o post
Compartilhar em outros sites
  • Autor do tópico
  • 2 horas atrás, Mauro Britivaldo disse:

    UNSIGNED X SIGNED

     

          Independente do sistema e/ou arquitetura os atuais sistemas computadorizados

    utilizam se de duas notações para números; unsigned quer dizer sem sinal,  signed

    que convencionalmente não é declarado pois existe por padrão implícito e quer  nos

    diz que, é com sinal, logo é o oposto de seu antagonista unsigned.

     

          Vamos adentrar um pouco mais na  memória  e  fazermos   uma representação

    gráfica  de   byVal especificamente,  como  sendo  uma  variável  declarado  do  tipo

    campo dentro das diretrizes impostas por sistemas 16 bits.

     

     

    Matriz12 Dec. 08 15.17.jpg

     

    A imagem acima nos ilustra o  momento  e  como função cout  interpreta  este  field

    na memória. Quero dizer é um campo mais  no  instante  da tarefa de exibir  na  tela

    se captura e a torna variável, assim sendo, toda variável inteira com sinal tem  o  pri-

    meiro bit da sequência o indicador da existência de sinal negativo, "regra do 1 bit".

    Quando declarado como sendo signed este bit sinaliza, ou seja é inteiro que  admite

    negativo,   quando   explicitamente   declaramos   unsigned   estamos  dizendo para

    o interpretador que está variável dever assumir valores somente positivos e ignore a

    regra do 1º bit.

     

         Avaliando o problema acima, o único bit da sequência, e por tanto o primeiro é  1,

    se não é definido unsigned, então será negativo, contrário será sempre positivo.

     

         

     

    @Ariel98

    Referencias / Leitura:

    Arquitetura 16 bits.

    [cout] Função exibir C++

    Qual a finalidade do unsigned no C.

    WIKIPEDIA: Binário Sinalizados 2016

     

     

     

    Muito obrigado, tioru a minha dúvida!

     

    Como marca o tópico como resolvido...?

    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

    ×